Android应用中使用AsyncHttpClient来异步网络数据

简介:

首先下载AsyncHttpClient的库文件,可以自行搜索,可以到下面地址下载

http://download.csdn.net/detail/xujinyang1234/5767419

测试的Activity,用到了RequstClient,LoadCacheResponseLoginouthandler,LoadDatahandler三个重写的类

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. package com.example.asynchttpclienttest;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.Menu;  
  6. import android.widget.TextView;  
  7.   
  8. import com.loopj.android.http.RequestParams;  
  9.   
  10. public class MainActivity extends Activity {  
  11.     private TextView test;  
  12.   
  13.     @Override  
  14.     protected void onCreate(Bundle savedInstanceState) {  
  15.         super.onCreate(savedInstanceState);  
  16.         setContentView(R.layout.activity_main);  
  17.         init();  
  18.     }  
  19.   
  20.     private void init() {  
  21.         test = (TextView) findViewById(R.id.test);  
  22.         System.out.println("拉拉");  
  23.         RequestParams param = new RequestParams();  
  24.         param.put("id", 1 + "");  
  25.         RequstClient.get(  
  26.                 "http://58.192.23.75:8080/xiaoxiao2/ColumnServletAndroid",  
  27.                 param, new LoadCacheResponseLoginouthandler(MainActivity.this,  
  28.                         new LoadDatahandler() {  
  29.                             @Override  
  30.                             public void onStart() {  
  31.                                 super.onStart();  
  32.                                 test.setText("开始拉去数据");  
  33.                             }  
  34.   
  35.                             @Override  
  36.                             public void onSuccess(String data) {  
  37.                                 super.onSuccess(data);  
  38.                                 test.setText(data);  
  39.                                 System.out.println("拉倒的数据" + data);  
  40.                             }  
  41.   
  42.                             @Override  
  43.                             public void onFailure(String error, String message) {  
  44.                                 super.onFailure(error, message);  
  45.                                 test.setText("错误的数据" + message);  
  46.                             }  
  47.   
  48.                             @Override  
  49.                             public void onFinish() {  
  50.                                 super.onFinish();  
  51.                             }  
  52.                         }));  
  53.     }  
  54.   
  55.     @Override  
  56.     public boolean onCreateOptionsMenu(Menu menu) {  
  57.         getMenuInflater().inflate(R.menu.main, menu);  
  58.         return true;  
  59.     }  
  60.   
  61. }  
RequstClient.java

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. package com.example.asynchttpclienttest;  
  2.   
  3. import com.loopj.android.http.AsyncHttpClient;  
  4. import com.loopj.android.http.AsyncHttpResponseHandler;  
  5. import com.loopj.android.http.RequestParams;  
  6.   
  7. public class RequstClient {  
  8.     /** 
  9.      * 定义一个异步网络客户端 默认超时未20秒 当超过,默认重连次数为5次 默认最大连接数为10个 
  10.      */  
  11.     private static AsyncHttpClient mClient = new AsyncHttpClient();  
  12.     static {  
  13.         mClient.setTimeout(20000);  
  14.     }  
  15.     public static void post(String url, AsyncHttpResponseHandler handler) {  
  16.         post(url, null, handler);  
  17.     }  
  18.     /** 
  19.      * post 请求 
  20.      *  
  21.      * @param url 
  22.      *            API 地址 
  23.      * @param params 
  24.      *            请求的参数 
  25.      * @param handler 
  26.      *            数据加载句柄对象 
  27.      */  
  28.     public static void post(String url, RequestParams params,  
  29.             AsyncHttpResponseHandler handler) {  
  30.         System.out.println("进入post");  
  31.         mClient.post(url, params, handler);  
  32.     }  
  33.     public static void get(String url, AsyncHttpResponseHandler handler) {  
  34.   
  35.     }  
  36.     public static void get(String url, RequestParams params,  
  37.             AsyncHttpResponseHandler handler) {  
  38.         System.out.println("进入get");  
  39.         mClient.get(url, params, handler);  
  40.     }  
  41. }  


[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. package com.example.asynchttpclienttest;  
  2.   
  3. import org.apache.http.Header;  
  4.   
  5. import android.content.Context;  
  6.   
  7. import com.loopj.android.http.AsyncHttpResponseHandler;  
  8.   
  9. public class LoadCacheResponseLoginouthandler extends AsyncHttpResponseHandler {  
  10.     private Context context;  
  11.     private LoadDatahandler mHandler;  
  12.   
  13.     public LoadCacheResponseLoginouthandler(Context context,  
  14.             LoadDatahandler mHandler) {  
  15.         this.context = context;  
  16.         this.mHandler = mHandler;  
  17.     }  
  18.     @Override  
  19.     public void onStart() {  
  20.         super.onStart();  
  21.         mHandler.onStart();  
  22.     }  
  23.     @Override  
  24.     public void onFailure(Throwable error, String content) {  
  25.         super.onFailure(error, content);  
  26.         mHandler.onFailure("", "网络连接超时");  
  27.     }  
  28.     @Override  
  29.     public void onFinish() {  
  30.         super.onFinish();  
  31.         mHandler.onFinish();  
  32.     }  
  33.   
  34.     @Override  
  35.     public void onSuccess(int statusCode, Header[] headers, String content) {  
  36.         super.onSuccess(statusCode, headers, content);  
  37.         System.out.println("得到的返回码" + statusCode);  
  38.         try {  
  39.             switch (statusCode) {  
  40.             case 200:  
  41.                 mHandler.onSuccess(content);  
  42.                 System.out.println("返回的内容" + content);  
  43.                 break;  
  44.             case 401:  
  45.                 onFailure("401", "没有登录");  
  46.   
  47.                 break;  
  48.             case 403:  
  49.                 onFailure("404", "没有权限");  
  50.                 break;  
  51.             default:  
  52.                 break;  
  53.             }  
  54.   
  55.         } catch (Exception e) {  
  56.             e.printStackTrace();  
  57.         }  
  58.     }  
  59.   
  60.     /** 
  61.      * 出错 
  62.      *  
  63.      * @param error 
  64.      * @param errorMessage 
  65.      */  
  66.     public void onFailure(String error, String errorMessage) {  
  67.         if (errorMessage != null) {  
  68.             mHandler.onFailure(error, errorMessage);  
  69.         }  
  70.     }  
  71. }  



接口:

[java]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. package com.example.asynchttpclienttest;  
  2.   
  3. public class LoadDatahandler {  
  4.     /** 
  5.      * 加载数据时调用 
  6.      */  
  7.     public void onStart() {};  
  8.     /** 
  9.      * 加载数据调用,得到缓存数据 
  10.      * @param data 
  11.      */  
  12.     public void onLoadCaches(String data) {};  
  13.     /** 
  14.      * 当调用服务器接口成功获取数据时,调用这个方法 
  15.      * @param data 
  16.      */  
  17.     public void onSuccess(String data) {};  
  18.       
  19.     /** 
  20.      * 当调用服务器接口获取数据失败时,调用这个方法 
  21.      * @param error     出错原因 
  22.      * @param message   出错原因描述 
  23.      */  
  24.     public void onFailure(String error, String message) {};  
  25.     /** 
  26.      * 加载完成时调用 
  27.      */  
  28.     public void onFinish() {};  
  29.   
  30. }  

扩展:

Android在AsyncHttpClient框架的基础上定制能直接返回对象数组的框架

相关文章
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic,深度学习探索者。深耕TensorFlow与PyTorch,分享框架对比、性能优化与实战经验,助力技术进阶。
|
监控 安全 Shell
管道符在渗透测试与网络安全中的全面应用指南
管道符是渗透测试与网络安全中的关键工具,既可用于高效系统管理,也可能被攻击者利用实施命令注入、权限提升、数据外泄等攻击。本文全面解析管道符的基础原理、实战应用与防御策略,涵盖Windows与Linux系统差异、攻击技术示例及检测手段,帮助安全人员掌握其利用方式与防护措施,提升系统安全性。
616 6
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
805 0
|
机器学习/深度学习 数据采集 传感器
【故障诊断】基于matlab BP神经网络电机数据特征提取与故障诊断研究(Matlab代码实现)
【故障诊断】基于matlab BP神经网络电机数据特征提取与故障诊断研究(Matlab代码实现)
379 0
|
数据采集 存储 算法
MyEMS 开源能源管理系统:基于 4G 无线传感网络的能源数据闭环管理方案
MyEMS 是开源能源管理领域的标杆解决方案,采用 Python、Django 与 React 技术栈,具备模块化架构与跨平台兼容性。系统涵盖能源数据治理、设备管理、工单流转与智能控制四大核心功能,结合高精度 4G 无线计量仪表,实现高效数据采集与边缘计算。方案部署灵活、安全性高,助力企业实现能源数字化与碳减排目标。
547 0
|
机器学习/深度学习 人工智能 算法
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic带你深入卷积神经网络(CNN)核心技术,从生物启发到数学原理,详解ResNet、注意力机制与模型优化,探索视觉智能的演进之路。
1048 11
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
472 0
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
831 11
|
机器学习/深度学习 数据采集 运维
改进的遗传算法优化的BP神经网络用于电厂数据的异常检测和故障诊断
改进的遗传算法优化的BP神经网络用于电厂数据的异常检测和故障诊断
|
存储 监控 算法
基于 Python 跳表算法的局域网网络监控软件动态数据索引优化策略研究
局域网网络监控软件需高效处理终端行为数据,跳表作为一种基于概率平衡的动态数据结构,具备高效的插入、删除与查询性能(平均时间复杂度为O(log n)),适用于高频数据写入和随机查询场景。本文深入解析跳表原理,探讨其在局域网监控中的适配性,并提供基于Python的完整实现方案,优化终端会话管理,提升系统响应性能。
571 4