httpClient

  1. // 网络访问请求
  2. new Thread(new Runnable() {
  3. @Override
  4. public void run() {
  5. String url = "http://192.168.1.101:8080/ChatServer/register";
  6. // 创建 httpClient
  7. HttpClient client = new DefaultHttpClient();
  8. // 创建 post请求
  9. HttpPost post = new HttpPost(url);
  10. List<NameValuePair> pairs = new ArrayList<NameValuePair>();
  11. // 配置请求头
  12. // post.addHeader("", "");
  13. // 配置请求参数
  14. pairs.add(new BasicNameValuePair("account", account));
  15. pairs.add(new BasicNameValuePair("password", password));
  16. try {
  17. post.setEntity(new UrlEncodedFormEntity(pairs));
  18. HttpResponse response = client.execute(post);
  19. int statusCode = response.getStatusLine().getStatusCode();
  20. if (statusCode == 200) {
  21. // 拿到网络的返回结果
  22. final String result = EntityUtils.toString(response
  23. .OgetEntity());
  24. Log.d("result : ", "" + result);
  25. // 需要在主线线程中做UI操作
  26. getActivity().runOnUiThread(new Runnable() {
  27. @Override
  28. public void run() {
  29. doResult(result);
  30. }
  31. });
  32. }
  33. } catch (Exception e) {
  34. e.printStackTrace();
  35. }
  36. }
  37. }).start();

AsyncHttp
  1. // 创建 访问端
  2. AsyncHttpClient client = new AsyncHttpClient();
  3. // 接口地址
  4. String url = "http://192.168.1.101:8080/ChatServer/register";
  5. //
  6. RequestParams params = new RequestParams();
  7. params.put("account", account);
  8. params.put("password", password);
  9. // 调用post方法访问网络
  10. client.post(context, url, params, new TextHttpResponseHandler() {
  11. @Override
  12. public void onSuccess(int statusCode, Header[] headers,
  13. String responseString) {
  14. Log.d("success", responseString + "");
  15. JsonParser parser = new JsonParser();
  16. JsonElement element = parser.parse(responseString);
  17. JsonObject root = element.getAsJsonObject();
  18. JsonPrimitive flagJson = root.getAsJsonPrimitive("flag");
  19. boolean flag = flagJson.getAsBoolean();
  20. if (flag) {
  21. JsonObject dataObject = root.getAsJsonObject("data");
  22. if (dataObject != null) {
  23. Account user = new Gson().fromJson(dataObject,
  24. Account.class);
  25. Log.d("", user.toString());
  26. }
  27. } else {
  28. JsonPrimitive errorCodeJson = root
  29. .getAsJsonPrimitive("errorCode");
  30. JsonPrimitive errorStringJson = root
  31. .getAsJsonPrimitive("errorString");
  32. Log.d("", errorCodeJson.getAsInt() + " : "
  33. + errorStringJson.getAsString());
  34. }
  35. }
  36. @Override
  37. public void onFailure(int statusCode, Header[] headers,
  38. String responseString, Throwable throwable) {
  39. Log.d("error", responseString + " : " + throwable.getMessage());
  40. }
  41. });
由于不需要每个页面访问网络都去写这一段代码,抽取:

回调接口:
  1. public abstract class ObjectCallback<T> {
  2. private final Class<T> clazz;
  3. @SuppressWarnings("unchecked")
  4. public ObjectCallback() {
  5. ParameterizedType type = (ParameterizedType) this.getClass()
  6. .getGenericSuperclass();
  7. clazz = (Class<T>) type.getActualTypeArguments()[0];//获取泛型
  8. }
  9. public Class<T> getDataClass() {
  10. return clazz;
  11. }
  12. public abstract void onSuccess(T data);
  13. public abstract void onFailure(int errorCode, String errorString);
  14. }
HMChatManager 
  1. public class HMChatManager {
  2. private static HMChatManager instance;
  3. private Context context;
  4. public static HMChatManager getInstance(Context context) {
  5. if (instance == null) {
  6. synchronized (HMChatManager.class) {
  7. if (instance == null) {
  8. instance = new HMChatManager(context);
  9. }
  10. }
  11. }
  12. return instance;
  13. }
  14. private HMChatManager(Context context) {
  15. this.context = context;
  16. }
  17. @SuppressWarnings("rawtypes")
  18. public HttpFuture sendRequest(String url, final ObjectCallback callback) {
  19. return sendRequest(url, null, callback);
  20. }
  21. @SuppressWarnings("rawtypes")
  22. public HttpFuture sendRequest(String url, Map<String, String> headers,
  23. Map<String, String> paramters, final ObjectCallback callback) {
  24. // 创建 访问端
  25. AsyncHttpClient client = new AsyncHttpClient();
  26. // 请求消息头
  27. if (headers != null) {
  28. for (Map.Entry<String, String> me : headers.entrySet()) {
  29. client.addHeader(me.getKey(), me.getValue());
  30. }
  31. }
  32. // 请求参数
  33. RequestParams params = new RequestParams();
  34. // params.put("account", account);
  35. // params.put("password", password);
  36. if (paramters != null) {
  37. for (Map.Entry<String, String> me : paramters.entrySet()) {
  38. params.put(me.getKey(), me.getValue());
  39. }
  40. }
  41. // 调用post方法访问网络
  42. RequestHandle handle = client.post(context, url, params,
  43. new TextHttpResponseHandler() {
  44. @SuppressWarnings("unchecked")
  45. @Override
  46. public void onSuccess(int statusCode, Header[] headers,
  47. String responseString) {
  48. Log.d("success", responseString + "");
  49. JsonParser parser = new JsonParser();
  50. JsonElement element = parser.parse(responseString);
  51. JsonObject root = element.getAsJsonObject();
  52. JsonPrimitive flagJson = root
  53. .getAsJsonPrimitive("flag");
  54. boolean flag = flagJson.getAsBoolean();
  55. if (flag) {
  56. JsonObject dataObject = root
  57. .getAsJsonObject("data");
  58. if (dataObject != null) {
  59. if (callback != null) {
  60. @SuppressWarnings("unchecked")
  61. Object obj = new Gson().fromJson(
  62. dataObject, callback.getDataClass());
  63. callback.onSuccess(obj);
  64. }
  65. }
  66. } else {
  67. JsonPrimitive errorCodeJson = root
  68. .getAsJsonPrimitive("errorCode");
  69. JsonPrimitive errorStringJson = root
  70. .getAsJsonPrimitive("errorString");
  71. Log.d("", errorCodeJson.getAsInt() + " : "
  72. + errorStringJson.getAsString());
  73. if (callback != null) {
  74. callback.onFailure(errorCodeJson.getAsInt(),
  75. errorStringJson.getAsString());
  76. }
  77. }
  78. }
  79. @Override
  80. public void onFailure(int statusCode, Header[] headers,
  81. String responseString, Throwable throwable) {
  82. Log.d("error",
  83. responseString + " : " + throwable.getMessage());
  84. if (callback != null) {
  85. callback.onFailure(HMError.ERROR_SERVER, "服务器连接问题");
  86. }
  87. }
  88. });
  89. return new HttpFuture(handle);
  90. }
访问的的时候
  1. String url = "http://192.168.1.101:8080/ChatServer/register";
  2. Map<String, String> paramters = new HashMap<String, String>();
  3. paramters.put("account", account);
  4. paramters.put("password", password);
  5. future = HMChatManager.getInstance(getActivity()).sendRequest(url,
  6. paramters, new ObjectCallback<Account>() {
  7. @Override
  8. public void onSuccess(Account data) {
  9. Log.d("onSuccess", data.toString());
  10. // 数据的存储
  11. AccountDao dao = new AccountDao(getActivity());
  12. data.setCurrent(true);
  13. Account localAccount = dao.getByAccount(data
  14. .getAccount());
  15. if (localAccount != null) {
  16. dao.updateAccount(data);
  17. } else {
  18. dao.addAccount(data);
  19. }
  20. // 页面跳转
  21. ((LoginActivity) getActivity()).go2FillInfo();
  22. }
  23. @Override
  24. public void onFailure(int errorCode, String errorString) {
  25. Log.d("onFailure", errorCode + " : " + errorString);
  26. switch (errorCode) {
  27. case HMError.ERROR_CLIENT_NET:
  28. Log.d(TAG, "客户端网络异常");
  29. ToastUtil.show(getActivity(), "客户端网络异常");
  30. break;
  31. case HMError.ERROR_SERVER:
  32. Log.d(TAG, "服务器异常");
  33. ToastUtil.show(getActivity(), "服务器异常");
  34. break;
  35. case HMError.Register.ACCOUNT_EXIST:
  36. Log.d(TAG, "用户已经存在");
  37. ToastUtil.show(getActivity(), "用户已经存在");
  38. break;
  39. default:
  40. break;
  41. }
  42. }
  43. });

 

附件列表

5.AsyncHttp、post的更多相关文章

  1. 框架--NoHttp和OkHttp哪个好用,Volley和NoHttp哪个好用?

    NoHttp和OkHttp哪个好用,Volley和NoHttp哪个好用? NoHttp 源码及Demo托管在Github欢迎大家Star: https://github.com/Y0LANDA/NoH ...

  2. 无废话Android之内容观察者ContentObserver、获取和保存系统的联系人信息、网络图片查看器、网络html查看器、使用异步框架Android-Async-Http(4)

    1.内容观察者ContentObserver 如果ContentProvider的访问者需要知道ContentProvider中的数据发生了变化,可以在ContentProvider 发生数据变化时调 ...

  3. (转)Android学习-使用Async-Http实现图片压缩并上传功能

    (转)Android学习-使用Async-Http实现图片压缩并上传功能 文章转载自:作者:RyaneLee链接:http://www.jianshu.com/p/940fc7ba39e1 让我头疼一 ...

  4. 55、Android网络图片 加载缓存处理库的使用

         先来一个普通的加载图片的方法. import android.annotation.SuppressLint; import android.app.Activity; import and ...

  5. js-静态、原型、实例属性

    本篇来说一下js中的属性: 1.静态属性 2.原型属性 3.实例属性 静态属性: function klass(){} var obj=new klass(); klass.count=0; klas ...

  6. 【.net 深呼吸】细说CodeDom(2):表达式、语句

    在上一篇文章中,老周厚着脸皮给大伙介绍了代码文档的基本结构,以及一些代码对象与CodeDom类型的对应关系. 在评论中老周看到有朋友提到了 Emit,那老周就顺便提一下.严格上说,Emit并不是针对代 ...

  7. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  8. IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法

    直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...

  9. jQuery UI resizable使用注意事项、实时等比例拉伸及你不知道的技巧

    这篇文章总结的是我在使用resizable插件的过程中,遇到的问题及变通应用的奇思妙想. 一.resizable使用注意事项 以下是我在jsfiddle上写的测试demo:http://jsfiddl ...

随机推荐

  1. ECMAScript6-下一代Javascript标准

    介绍 ECMAScript6是下一代Javascript标准,这个标准将在2015年6月得到批准.ES6是Javascript的一个重大的更新,并且是自2009年发布ES5以来的第一次更新. 它将会在 ...

  2. 随鼠标移动的div

    <html> <head> <style type='text/css'> #d{ border:1px solid green; width:90px; heig ...

  3. CKEditor使用笔记

    相关资源 1. 首页地址:http://ckeditor.com/ 2. 下载地址:http://ckeditor.com/download 3. SDK地址:http://sdk.ckeditor. ...

  4. LR 测试数据库总结

    今天工作中需要对mysql进行性能测试 我尝试用LR来做:但是mysql需要现在电脑上安装一个OBDC的mysql驱动器,然后在电脑的管理工具中的数据源中加入这个mysql驱动,测试连接数据库成功,O ...

  5. Codeforces Round #FF (Div. 2) C. DZY Loves Sequences

    解题报告:输入一个数列,选取一个子数列,要求最多只能改动这个子数列中的一个数,使得这个子数列是严格的升序的(严格升序没有相等的) 我的做法是,第一步把这个 数列的每个升序的子数列都找出来,然后看这些子 ...

  6. 手动安装ubuntu视频播放器插件的方法

    新安装的ubuntu14.04在浏览器里面都不能看视频,提示缺少播放器插件,而且有一个安装的按钮,但是点击之后往往提示找不到,这就要手动安装了.第一步:首先运行一下更新命令吧sudo apt-get ...

  7. 从零开始写一个武侠冒险游戏-6-用GPU提升性能(1)

    从零开始写一个武侠冒险游戏-6-用GPU提升性能(1) ----把帧动画的实现放在GPU上 作者:FreeBlues 修订记录 2016.06.19 初稿完成. 2016.08.05 增加对 XCod ...

  8. Nmap备忘单:从探索到漏洞利用(Part3)

    众所周知NMAP是经常用来进行端口发现.端口识别.除此之外我们还可以通过NMAP的NSE脚本做很多事情,比如邮件指纹识别,检索WHOIS记录,使用UDP服务等. 发现地理位置 Gorjan Petro ...

  9. 暑假热身 D. 条形码设计

    校ACM队准备筹划向学校批请一个专用机房.但是为了防止它变成公用机房,FL建议采用刷卡进入的办法,她设计了一种条形码,每人都对应一个.这种大小为2*n的条形码由以下三种元素构成:1*2.2*1.2*2 ...

  10. 【Hibernate】Hibernate系列8之管理session

    管理session 更简单的,注入对象: