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 ...
随机推荐
- logback 常用配置详解(二)
<appender> <appender>: <appender>是<configuration>的子节点,是负责写日志的组件. <appende ...
- 如何让ThinkPHP的模板引擎达到最佳效率
默认情况下ThinkPHP框架系统默认使用的模板引擎是内置模板引擎.内置模板引擎支持模板文件中采用php原生态代码和模板标签的混合使用.ThinkPHP官方开发文档说,这种默认的内置模板引擎的性能是高 ...
- Y2K Accounting Bug(贪心)
Y2K Accounting Bug Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10945 Accepted: 54 ...
- [BZOJ2820]YY的GCD
[BZOJ2820]YY的GCD 试题描述 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少 ...
- Linux多线程编程——多线程与线程同步
多线程 使用多线程好处: 一.通过为每种事件类型的处理单独分配线程,可以简化处理异步事件的代码,线程处理事件可以采用同步编程模式,启闭异步编程模式简单 二.方便的通信和数据交换 由于进程之间具有独立的 ...
- 【转】java反射详解
转自:http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的 ...
- global-local-static-object
[本文链接] http://www.cnblogs.com/hellogiser/p/global-local-static-object.html [分析] 1.生命周期问题:static变量在固定 ...
- 42.旋转数组的最小元素[Get min value of rotated array]
[题目] 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个排好序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5 ...
- jquery validate自定义checkbox验证规则和样式
参考:http://blog.csdn.net/xh16319/article/details/9987847 自定义checkbox验证,“检查checkbox是否选中” jQuery.valida ...
- codeforces B. Valera and Contest 解题报告
题目链接:http://codeforces.com/problemset/problem/369/B 题目意思:给出6个整数, n, k, l, r, sall, sk ,需要找出一个满足下列条件的 ...