5.AsyncHttp、post
httpClient
// 网络访问请求new Thread(new Runnable() {@Overridepublic void run() {String url = "http://192.168.1.101:8080/ChatServer/register";// 创建 httpClientHttpClient 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() {@Overridepublic 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() {@Overridepublic 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());}}@Overridepublic 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")@Overridepublic 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());}}}@Overridepublic 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>() {@Overridepublic 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();}@Overridepublic 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 ...
随机推荐
- Kik CEO Ted Livingston发博称要成为西方的微信?
加拿大手机聊天应用Kik是一款手机通信录的社交软件,和Snapchat.微信相似,上个月刚拿到3830万美元融资.近日,Kik CEO Ted Livingston在medium博客上发表了the r ...
- TASKKILL命令使用大全
Mr.Savin Mr.Savin 2009-08-07 183315TASKKILL [S system [U username [P [password]] { [FI filter] [PID ...
- unity3D 搞定任意ios插件
原地址:http://www.cnblogs.com/U-tansuo/archive/2012/11/22/unity_ios-plugin.html 说起unity调ios插件,好多淫比较头痛,探 ...
- KMP算法精髓
这个算法的做法就是在部分匹配的时候,常规想法是向后移动一位,但是KMP想法是向后移动n位(n=m-L). 注释:这里m表示已经匹配了的字符的个数,L表示已经匹配了的那些字符组成的这个字符串的前缀和后缀 ...
- encode与decode,unicode与中文乱码的问题
encode是指将unicode字符编码成其他字符集的字符,如utf-8,ascii等: 而decode是指将其他字符编码,如utf-8转换成unicode编码. encode是指将人类用的语言(字符 ...
- 2014-08-07 SSDB 使用 rocksdb 引擎
http://www.ideawu.net/blog/archives/824.html 为了满足各位对 Facebook 出品的 rocksdb 的爱好, SSDB 数据库也可以使用 rocksdb ...
- Android自定义Dialog
Android开发过程中,常常会遇到一些需求场景——在界面上弹出一个弹框,对用户进行提醒并让用户进行某些选择性的操作, 如退出登录时的弹窗,让用户选择“退出”还是“取消”等操作. Android系统提 ...
- python string与list互转
因为python的read和write方法的操作对象都是string.而操作二进制的时候会把string转换成list进行解析,解析后重新写入文件的时候,还得转换成string. >>&g ...
- 多表利用DIH批量导入数据并建立索引注意事项
如果希望同时对多个表进行全文检索,那我们该如何处理呢?利用DIH导入数据并建立索引时.schema.xml中配置了uniqueKey为id <uniqueKey>id</unique ...
- Java for LeetCode 078 Subsets
Given a set of distinct integers, nums, return all possible subsets. Note: Elements in a subset must ...