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框架的基础上定制能直接返回对象数组的框架

相关文章
|
2月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
221 4
|
1月前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
62 14
|
1月前
|
Java Linux 数据库
探索安卓开发:打造你的第一款应用
在数字时代的浪潮中,每个人都有机会成为创意的实现者。本文将带你走进安卓开发的奇妙世界,通过浅显易懂的语言和实际代码示例,引导你从零开始构建自己的第一款安卓应用。无论你是编程新手还是希望拓展技术的开发者,这篇文章都将为你打开一扇门,让你的创意和技术一起飞扬。
|
1月前
|
搜索推荐 前端开发 测试技术
打造个性化安卓应用:从设计到开发的全面指南
在这个数字时代,拥有一个定制的移动应用不仅是一种趋势,更是个人或企业品牌的重要延伸。本文将引导你通过一系列简单易懂的步骤,从构思你的应用理念开始,直至实现一个功能齐全的安卓应用。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你提供必要的工具和知识,帮助你将创意转化为现实。
|
2月前
|
安全 算法 网络安全
量子计算与网络安全:保护数据的新方法
量子计算的崛起为网络安全带来了新的挑战和机遇。本文介绍了量子计算的基本原理,重点探讨了量子加密技术,如量子密钥分发(QKD)和量子签名,这些技术利用量子物理的特性,提供更高的安全性和可扩展性。未来,量子加密将在金融、政府通信等领域发挥重要作用,但仍需克服量子硬件不稳定性和算法优化等挑战。
|
1月前
|
Java Android开发 开发者
探索安卓开发:构建你的第一个“Hello World”应用
在安卓开发的浩瀚海洋中,每个新手都渴望扬帆起航。本文将作为你的指南针,引领你通过创建一个简单的“Hello World”应用,迈出安卓开发的第一步。我们将一起搭建开发环境、了解基本概念,并编写第一行代码。就像印度圣雄甘地所说:“你必须成为你希望在世界上看到的改变。”让我们一起开始这段旅程,成为我们想要见到的开发者吧!
38 0
|
2月前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!
|
2月前
|
存储 搜索推荐 Java
打造个性化安卓应用:从设计到实现
【10月更文挑战第30天】在数字化时代,拥有一个个性化的安卓应用不仅能够提升用户体验,还能加强品牌识别度。本文将引导您了解如何从零开始设计和实现一个安卓应用,涵盖用户界面设计、功能开发和性能优化等关键环节。我们将以一个简单的记事本应用为例,展示如何通过Android Studio工具和Java语言实现基本功能,同时确保应用流畅运行。无论您是初学者还是希望提升现有技能的开发者,这篇文章都将为您提供宝贵的见解和实用的技巧。
|
2月前
|
存储 安全 网络安全
云计算与网络安全:保护数据的新策略
【10月更文挑战第28天】随着云计算的广泛应用,网络安全问题日益突出。本文将深入探讨云计算环境下的网络安全挑战,并提出有效的安全策略和措施。我们将分析云服务中的安全风险,探讨如何通过技术和管理措施来提升信息安全水平,包括加密技术、访问控制、安全审计等。此外,文章还将分享一些实用的代码示例,帮助读者更好地理解和应用这些安全策略。
|
2月前
|
搜索推荐 开发工具 Android开发
打造个性化Android应用:从设计到实现的旅程
【10月更文挑战第26天】在这个数字时代,拥有一个能够脱颖而出的移动应用是成功的关键。本文将引导您了解如何从概念化阶段出发,通过设计、开发直至发布,一步步构建一个既美观又实用的Android应用。我们将探讨用户体验(UX)设计的重要性,介绍Android开发的核心组件,并通过实际案例展示如何克服开发中的挑战。无论您是初学者还是有经验的开发者,这篇文章都将为您提供宝贵的见解和实用的技巧,帮助您在竞争激烈的应用市场中脱颖而出。
下一篇
开通oss服务