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. Linux 解压命令tar的理解

    今天回顾了下tar 这个打包工具的一些常用参数 选项与参数: -c :创建打包文件,可搭配 -v 来察看过程中被打包的档名(filename) -t :察看打包文件的内容含有哪些档名,重点在察看『档名 ...

  2. CSS-3 Animation 的使用

    在开始介绍Animation之前我们有必要先来了解一个特殊的东西,那就是"Keyframes",我们把他叫做"关键帧",玩过flash的朋友可能对这个东西并不会 ...

  3. cocos2dx的内存管理机制

    首先我们必须说一下c++中变量的内存空间的分配问题,我们在c++中写一个类,可以在栈上分配内存空间也可以使用new在堆上分配内存空间,如果类对象是在栈上分配的内存空间,这个内存空间的管理就不是我们的事 ...

  4. Seventh scrum meeting - 2015/11/1

    新的一月开始了!今天是周末,所以大家的开发进度有点减慢,享受一个愉快的周末~ 今天大家的开发都没有遇到什么问题,因为这几天下来,大家对android的开发流程都比较熟悉了,暂时不会遇到新的问题了. 我 ...

  5. HDU 4857 逃生 (优先队列+反向拓扑)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4857 解题报告:有n个点,有m个条件限制,限制是像这样的,输入a  b,表示a必须排在b的前面,如果不 ...

  6. SIFT+HOG+鲁棒统计+RANSAC

    今天的计算机视觉课老师讲了不少内容,不过都是大概讲了下,我先记录下,细讲等以后再补充. SIFT特征: 尺度不变性:用不同参数的高斯函数作用于图像(相当于对图像进行模糊,得到不同尺度的图像),用得到的 ...

  7. 做网站用UTF-8还是GB2312 & 各国语言对应字符集

    经常我们打开外国网站的时候出现乱码,又或者打开很多非英语的外国网站的时候,显示的都是口口口口口的字符, WordPress程序是用的UTF-8,很多cms用的是GB2312. ● 为什么有这么多编码? ...

  8. PeopleEditor允许客户端输入的同时验证输入的内容

    如何判断PeopleEditor的值为空   在sharepoint开发中,我们经常会用到PeopleEditor这一控件,最近我在写程序的时候用到了,开始的时候不知道怎么用,后来问题解决啦,现在写出 ...

  9. spring无法扫描jar包的问题

    在日常开发中往往会对公共的模块打包发布,然后调用公共包的内容.然而,最近对公司的公共模块进行整理发布后.spring却无法扫描到相应的bean.折腾了好久,最终发现是认识上的误区. 2015-11-1 ...

  10. iOS 使用Storyboard 和 xib时的一些知识

    以前不太使用xib和storyboard进行布局,后来在工作中参与到了一个项目的维护工作,那个项目就是使用stroyboard的,再加上xcode5对stroyboard的大力支持,就在这里对于使用s ...