5.AsyncHttp、post
httpClient
// 网络访问请求
new Thread(new Runnable() {
@Override
public void run() {
String url = "http://192.168.1.101:8080/ChatServer/register";
// 创建 httpClient
HttpClient client = new DefaultHttpClient();
// 创建 post请求
HttpPost post = new HttpPost(url);
List<NameValuePair> pairs = new ArrayList<NameValuePair>();
// 配置请求头
// post.addHeader("", "");
// 配置请求参数
pairs.add(new BasicNameValuePair("account", account));
pairs.add(new BasicNameValuePair("password", password));
try {
post.setEntity(new UrlEncodedFormEntity(pairs));
HttpResponse response = client.execute(post);
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) {
// 拿到网络的返回结果
final String result = EntityUtils.toString(response
.OgetEntity());
Log.d("result : ", "" + result);
// 需要在主线线程中做UI操作
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
doResult(result);
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
// 创建 访问端
AsyncHttpClient client = new AsyncHttpClient();
// 接口地址
String url = "http://192.168.1.101:8080/ChatServer/register";
//
RequestParams params = new RequestParams();
params.put("account", account);
params.put("password", password);
// 调用post方法访问网络
client.post(context, url, params, new TextHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers,
String responseString) {
Log.d("success", responseString + "");
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(responseString);
JsonObject root = element.getAsJsonObject();
JsonPrimitive flagJson = root.getAsJsonPrimitive("flag");
boolean flag = flagJson.getAsBoolean();
if (flag) {
JsonObject dataObject = root.getAsJsonObject("data");
if (dataObject != null) {
Account user = new Gson().fromJson(dataObject,
Account.class);
Log.d("", user.toString());
}
} else {
JsonPrimitive errorCodeJson = root
.getAsJsonPrimitive("errorCode");
JsonPrimitive errorStringJson = root
.getAsJsonPrimitive("errorString");
Log.d("", errorCodeJson.getAsInt() + " : "
+ errorStringJson.getAsString());
}
}
@Override
public void onFailure(int statusCode, Header[] headers,
String responseString, Throwable throwable) {
Log.d("error", responseString + " : " + throwable.getMessage());
}
});

public abstract class ObjectCallback<T> {
private final Class<T> clazz;
@SuppressWarnings("unchecked")
public ObjectCallback() {
ParameterizedType type = (ParameterizedType) this.getClass()
.getGenericSuperclass();
clazz = (Class<T>) type.getActualTypeArguments()[0];//获取泛型
}
public Class<T> getDataClass() {
return clazz;
}
public abstract void onSuccess(T data);
public abstract void onFailure(int errorCode, String errorString);
}
public class HMChatManager {
private static HMChatManager instance;
private Context context;
public static HMChatManager getInstance(Context context) {
if (instance == null) {
synchronized (HMChatManager.class) {
if (instance == null) {
instance = new HMChatManager(context);
}
}
}
return instance;
}
private HMChatManager(Context context) {
this.context = context;
}
@SuppressWarnings("rawtypes")
public HttpFuture sendRequest(String url, final ObjectCallback callback) {
return sendRequest(url, null, callback);
}
@SuppressWarnings("rawtypes")
public HttpFuture sendRequest(String url, Map<String, String> headers,
Map<String, String> paramters, final ObjectCallback callback) {
// 创建 访问端
AsyncHttpClient client = new AsyncHttpClient();
// 请求消息头
if (headers != null) {
for (Map.Entry<String, String> me : headers.entrySet()) {
client.addHeader(me.getKey(), me.getValue());
}
}
// 请求参数
RequestParams params = new RequestParams();
// params.put("account", account);
// params.put("password", password);
if (paramters != null) {
for (Map.Entry<String, String> me : paramters.entrySet()) {
params.put(me.getKey(), me.getValue());
}
}
// 调用post方法访问网络
RequestHandle handle = client.post(context, url, params,
new TextHttpResponseHandler() {
@SuppressWarnings("unchecked")
@Override
public void onSuccess(int statusCode, Header[] headers,
String responseString) {
Log.d("success", responseString + "");
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(responseString);
JsonObject root = element.getAsJsonObject();
JsonPrimitive flagJson = root
.getAsJsonPrimitive("flag");
boolean flag = flagJson.getAsBoolean();
if (flag) {
JsonObject dataObject = root
.getAsJsonObject("data");
if (dataObject != null) {
if (callback != null) {
@SuppressWarnings("unchecked")
Object obj = new Gson().fromJson(
dataObject, callback.getDataClass());
callback.onSuccess(obj);
}
}
} else {
JsonPrimitive errorCodeJson = root
.getAsJsonPrimitive("errorCode");
JsonPrimitive errorStringJson = root
.getAsJsonPrimitive("errorString");
Log.d("", errorCodeJson.getAsInt() + " : "
+ errorStringJson.getAsString());
if (callback != null) {
callback.onFailure(errorCodeJson.getAsInt(),
errorStringJson.getAsString());
}
}
}
@Override
public void onFailure(int statusCode, Header[] headers,
String responseString, Throwable throwable) {
Log.d("error",
responseString + " : " + throwable.getMessage());
if (callback != null) {
callback.onFailure(HMError.ERROR_SERVER, "服务器连接问题");
}
}
});
return new HttpFuture(handle);
}
String url = "http://192.168.1.101:8080/ChatServer/register";
Map<String, String> paramters = new HashMap<String, String>();
paramters.put("account", account);
paramters.put("password", password);
future = HMChatManager.getInstance(getActivity()).sendRequest(url,
paramters, new ObjectCallback<Account>() {
@Override
public void onSuccess(Account data) {
Log.d("onSuccess", data.toString());
// 数据的存储
AccountDao dao = new AccountDao(getActivity());
data.setCurrent(true);
Account localAccount = dao.getByAccount(data
.getAccount());
if (localAccount != null) {
dao.updateAccount(data);
} else {
dao.addAccount(data);
}
// 页面跳转
((LoginActivity) getActivity()).go2FillInfo();
}
@Override
public void onFailure(int errorCode, String errorString) {
Log.d("onFailure", errorCode + " : " + errorString);
switch (errorCode) {
case HMError.ERROR_CLIENT_NET:
Log.d(TAG, "客户端网络异常");
ToastUtil.show(getActivity(), "客户端网络异常");
break;
case HMError.ERROR_SERVER:
Log.d(TAG, "服务器异常");
ToastUtil.show(getActivity(), "服务器异常");
break;
case HMError.Register.ACCOUNT_EXIST:
Log.d(TAG, "用户已经存在");
ToastUtil.show(getActivity(), "用户已经存在");
break;
default:
break;
}
}
});
附件列表
5.AsyncHttp、post的更多相关文章
- 框架--NoHttp和OkHttp哪个好用,Volley和NoHttp哪个好用?
NoHttp和OkHttp哪个好用,Volley和NoHttp哪个好用? NoHttp 源码及Demo托管在Github欢迎大家Star: https://github.com/Y0LANDA/NoH ...
- 无废话Android之内容观察者ContentObserver、获取和保存系统的联系人信息、网络图片查看器、网络html查看器、使用异步框架Android-Async-Http(4)
1.内容观察者ContentObserver 如果ContentProvider的访问者需要知道ContentProvider中的数据发生了变化,可以在ContentProvider 发生数据变化时调 ...
- (转)Android学习-使用Async-Http实现图片压缩并上传功能
(转)Android学习-使用Async-Http实现图片压缩并上传功能 文章转载自:作者:RyaneLee链接:http://www.jianshu.com/p/940fc7ba39e1 让我头疼一 ...
- 55、Android网络图片 加载缓存处理库的使用
先来一个普通的加载图片的方法. import android.annotation.SuppressLint; import android.app.Activity; import and ...
- js-静态、原型、实例属性
本篇来说一下js中的属性: 1.静态属性 2.原型属性 3.实例属性 静态属性: function klass(){} var obj=new klass(); klass.count=0; klas ...
- 【.net 深呼吸】细说CodeDom(2):表达式、语句
在上一篇文章中,老周厚着脸皮给大伙介绍了代码文档的基本结构,以及一些代码对象与CodeDom类型的对应关系. 在评论中老周看到有朋友提到了 Emit,那老周就顺便提一下.严格上说,Emit并不是针对代 ...
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
- IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法
直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...
- jQuery UI resizable使用注意事项、实时等比例拉伸及你不知道的技巧
这篇文章总结的是我在使用resizable插件的过程中,遇到的问题及变通应用的奇思妙想. 一.resizable使用注意事项 以下是我在jsfiddle上写的测试demo:http://jsfiddl ...
随机推荐
- 搜狗2013年校园招聘研发类笔试试卷之C/C++类
今天无聊在网上搜了下今年各大NB IT公司的笔试题,搜到了搜狗的,只有扫描版的试卷没有电子版也没有答案,就拿来做了做,题目非常多,涉及到C/C++.Java.数据结构.Android.IOS.Java ...
- [Effective JavaScript 笔记]第22条:使用arguments创建可变参数的函数
第21条讲述使用可变参数的函数average.该函数可处理任意数量的参数并返回这些参数的平均值. 如何创建可变参数的函数 1.实现固定元数的函数 书上的版本 function averageOfArr ...
- JS 自定义正则表达式
1. 正则表达式规则 1.1 普通字符 字母.数字.汉字.下划线.以及后边章节中没有特殊定义的标点符号,都是"普通字符".表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的 ...
- linux增加自定义path和manpath
linux安装软件到自定义路径时,新安装的命令需要带上路径才可以执行,不能像系统自带命令那样可以直接使用. 这个时候可以通过修改环境变量PATH和MANPATH,来实现像系统命令一样使用新安装的命令并 ...
- Dan计划:重新定义人生的10000个小时
一. 1985年,芝加哥大学的Benjamin Bloom教授,出版了一本重要著作<如何培养天才>(Developing Talent in Young People). 他研究的是,如何 ...
- .Net Attribute特性
1.什么是Atrribute 首先,我们肯定Attribute是一个类,下面是msdn文档对它的描述: 公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标 ...
- 《ASP.NET1200例》嵌套在DataLisT控件中的其他服务器控件---DropDownList控件的数据绑定
aspx <script type="text/javascript"> function CheckAll(Obj) { var AllObj = document. ...
- Bulb Switcher
There are n bulbs that are initially off. You first turn on all the bulbs. Then, you turn off every ...
- 42.旋转数组的最小元素[Get min value of rotated array]
[题目] 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个排好序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5 ...
- 转数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示
本文原文连接: http://blog.csdn.net/bluishglc/article/details/7696085 ,转载请注明出处!本文着重介绍sharding切分策略,如果你对数据库sh ...