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. Spring各个jar包的简介

    spring.jar是包含有完整发布的单个jar 包,spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到 spring-m ...

  2. 自动化测试工具Selenium和QTP的比较

    一.用户仿真:Selenium在浏览器后台执行,它通过修改HTML的DOM(文档对象模型)来执行操作,实际上是通过javascript来控制的.执行时窗口可以最小化,可以在同一机器执行多个测试.QTP ...

  3. JSP基本面试的试题

    JSP基本面试的试题 1.jsp有哪些内置对象作用分别是什么 答:JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):      request 用户端请求,此请求会包含来自GET/PO ...

  4. AWS AutoScaling

    origin_from: http://blog.csdn.net/libing_thinking/article/details/48327189 AutoScaling 是 AWS 比较核心的一个 ...

  5. 面向侧面的程序设计AOP-------《一》概述

    Aspect-Oriented Programming(面向方面编程,AOP)正好可以解决这一问题.它允许开发者动态地修改静态的OO模型,构造出一个能够不断增长以满足新增需求的系统,就象现实世界中的对 ...

  6. 【leetcode】Combination Sum II

    Combination Sum II Given a collection of candidate numbers (C) and a target number (T), find all uni ...

  7. python在线文档

    中文 http://python.usyiyi.cn/--------------------------不完整 http://www.pythondoc.com/pythontutorial27/i ...

  8. DP:Cheapest Palindrome(POJ 3280)

    价值最小回文字符串 题目大意:给你一个字符串,可以删除可以添加,并且每一次对一个字母的操作都带一个权,问你转成回文串最优操作数. 如果这一题我这样告诉你,你毫无疑问知道这一题是LD(Levenshti ...

  9. Java中删除文件、删除目录及目录下所有文件

    转载自:http://www.cnblogs.com/eczhou/archive/2012/01/16/2323431.html 功能:删除某个目录及目录下的所有子目录和文件 知识点:File.de ...

  10. swift复合类型

     1.元组类型 (tuple) 元组就是多个元素的组合,是一个用圆括号括起来分号分隔的多个数据的一个集合体. 例如:定义一个学生变量,要求姓名 jim,年龄 19,性别 male 的元组变量为  // ...