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 ...
随机推荐
- linux cp命令参数及用法详解
cp (复制档案或目录)[root@linux ~]# cp [-adfilprsu] 来源档(source) 目的檔(destination)[root@linux ~]# cp [options] ...
- Milking Cows
Milking Cows Three farmers rise at 5 am each morning and head for the barn to milk three cows. The f ...
- MySQL 5.6 Warning: Using a password on the command line interface can be insecure
MySQL 5.6 在命令行输入密码,就会提示这些安全警告信息. Warning: Using a password on the command line interface can be inse ...
- 分页控件-ASP.NET(AspNetPager)
AspNetPager是asp.net中常用的分页控件,下载AspNetPager.dll,添加引用,在工具栏就可以看到AspNetPager控件: <div class="oa-el ...
- vim在选中的几行中查找并替换
(文章是从我的个人主页上粘贴过来的, 大家也可以访问我的主页 www.iwangzheng.com) 使用vim编辑器是能带来很大的便捷的,如何替换选中的多行中的某个单词呢. 先选中,按下冒号,左下方 ...
- POJ 1797 Heavy Transportation (Dijkstra变形)
F - Heavy Transportation Time Limit:3000MS Memory Limit:30000KB 64bit IO Format:%I64d & ...
- 【转】基于注解的SpirngMVC简单介绍
转载地址:http://haohaoxuexi.iteye.com/blog/1343761 SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求最先访问的都是 Di ...
- Sybase IQ导出文件的几种方式
IQ有四种方法,将表的数据导出为文本文件:1.重定向 SELECT * FROM TABLE1 ># D:MYDATATABLE1.TXT -- 文件生成在执行语句的客户端上 2.通过选项导出 ...
- 2013 ACM/ICPC 长春网络赛E题
题意:给出一个字符串,要从头.尾和中间找出三个完全相等的子串,这些串覆盖的区间互相不能有重叠部分.头.尾的串即为整个字符串的前缀和后缀.问这个相同的子串的最大长度是多少. 分析:利用KMP算法中的ne ...
- PHP 调试用函数
2014年7月4日 10:27:59 有些系统函数可以在调试程序时救急用: get_class_methods(); get_class_vars(); get_object_vars(); get_ ...