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 ...
随机推荐
- Asp.net磁力链接搜索引擎源码-www.btboot.com
演示网址:www.btboot.com 源码出售中.... 联系QQ:313843288
- 微信公开课发布微信官方教程:教你用好微信JS-SDK接口
微信公众平台开放JS-SDK(微信内网页开发工具包),说明文档已经有相关使用方法和示例了,很多同学觉得不是很直观,为此微信公开课发布微信官方教程:教你用好微信JS-SDK接口. 1.分享类接口:支持获 ...
- mstsc局域网远程 要预先做的设置
很简单========= 一:在“控制面板”->“管理工具”->“服务”上启动Remote Desktop Help Session Manager的服务; 二: 在“控制面板”-> ...
- unity3d进行脚本资源打包加载
原地址:http://www.cnblogs.com/hisiqi/p/3204752.html 本文记录如何通过unity3d进行脚本资源打包加载 1.创建TestDll.cs文件 public c ...
- linux 回收站的添加
在~下 .bashrc或者.bash_profile加入 mkdir -p ~/.trash alias rm=trash trash() { mv $@ ...
- nGrinder性能测试平台搭建(LVS压力测试)
1. nGrinder是什么 nGrinder是一个免费的.开放源代码的Web性能测试平台.运行在应用中间件服务器中运行.它由一个控制端和多个代理端组成.通过控制端(浏览器访问)建立测试场景,然后通过 ...
- 使用MegaCli和Smartctl获取普通磁盘
设备名称: [root@DB232 shell]# cat /proc/scsi/scsi Attached devices:Host: scsi0 Channel: 02 Id: 00 Lun: 0 ...
- linux 下如何查看和踢除正在登陆的其它用户 ==>Linux下用于查看系统当前登录用户信息的4种方法
在linux系统中用pkill命令踢出在线登录用户 由于linux服务器允许多用户登录,公司很多人知道密码,工作造成一定的障碍 所以需要有时踢出指定的用户 1/#who 查出当前有那些终端登录(用 ...
- C++使用throw抛出异常
引用: c++ 使用throw抛出异常 抛出异常(也称为抛弃异常)即检测是否产生异常,在C++中,其采用throw语句来实现,如果检测到产生异常,则抛出异常.该语句的格式为:throw 表达式; ...
- 【转】Solr从数据库导入数据(DIH)
本文转自:http://blog.csdn.net/xiaoyu714543065/article/details/11849115 一. 数据导入(DataImportHandler-DIH) DI ...