Android应用中使用AsyncHttpClient来异步网络数据
2023-09-27 14:23:52 时间
首先下载AsyncHttpClient的库文件,可以自行搜索,可以到下面地址下载
http://download.csdn.net/detail/xujinyang1234/5767419
测试的Activity,用到了RequstClient,LoadCacheResponseLoginouthandler,LoadDatahandler三个重写的类
package com.example.asynchttpclienttest; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.widget.TextView; import com.loopj.android.http.RequestParams; public class MainActivity extends Activity { private TextView test; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { test = (TextView) findViewById(R.id.test); System.out.println("拉拉"); RequestParams param = new RequestParams(); param.put("id", 1 + ""); RequstClient.get( "http://58.192.23.75:8080/xiaoxiao2/ColumnServletAndroid", param, new LoadCacheResponseLoginouthandler(MainActivity.this, new LoadDatahandler() { @Override public void onStart() { super.onStart(); test.setText("开始拉去数据"); } @Override public void onSuccess(String data) { super.onSuccess(data); test.setText(data); System.out.println("拉倒的数据" + data); } @Override public void onFailure(String error, String message) { super.onFailure(error, message); test.setText("错误的数据" + message); } @Override public void onFinish() { super.onFinish(); } })); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }
RequstClient.java
package com.example.asynchttpclienttest; import com.loopj.android.http.AsyncHttpClient; import com.loopj.android.http.AsyncHttpResponseHandler; import com.loopj.android.http.RequestParams; public class RequstClient { /** * 定义一个异步网络客户端 默认超时未20秒 当超过,默认重连次数为5次 默认最大连接数为10个 */ private static AsyncHttpClient mClient = new AsyncHttpClient(); static { mClient.setTimeout(20000); } public static void post(String url, AsyncHttpResponseHandler handler) { post(url, null, handler); } /** * post 请求 * * @param url * API 地址 * @param params * 请求的参数 * @param handler * 数据加载句柄对象 */ public static void post(String url, RequestParams params, AsyncHttpResponseHandler handler) { System.out.println("进入post"); mClient.post(url, params, handler); } public static void get(String url, AsyncHttpResponseHandler handler) { } public static void get(String url, RequestParams params, AsyncHttpResponseHandler handler) { System.out.println("进入get"); mClient.get(url, params, handler); } }
package com.example.asynchttpclienttest; import org.apache.http.Header; import android.content.Context; import com.loopj.android.http.AsyncHttpResponseHandler; public class LoadCacheResponseLoginouthandler extends AsyncHttpResponseHandler { private Context context; private LoadDatahandler mHandler; public LoadCacheResponseLoginouthandler(Context context, LoadDatahandler mHandler) { this.context = context; this.mHandler = mHandler; } @Override public void onStart() { super.onStart(); mHandler.onStart(); } @Override public void onFailure(Throwable error, String content) { super.onFailure(error, content); mHandler.onFailure("", "网络连接超时"); } @Override public void onFinish() { super.onFinish(); mHandler.onFinish(); } @Override public void onSuccess(int statusCode, Header[] headers, String content) { super.onSuccess(statusCode, headers, content); System.out.println("得到的返回码" + statusCode); try { switch (statusCode) { case 200: mHandler.onSuccess(content); System.out.println("返回的内容" + content); break; case 401: onFailure("401", "没有登录"); break; case 403: onFailure("404", "没有权限"); break; default: break; } } catch (Exception e) { e.printStackTrace(); } } /** * 出错 * * @param error * @param errorMessage */ public void onFailure(String error, String errorMessage) { if (errorMessage != null) { mHandler.onFailure(error, errorMessage); } } }
接口:
package com.example.asynchttpclienttest; public class LoadDatahandler { /** * 加载数据时调用 */ public void onStart() {}; /** * 加载数据调用,得到缓存数据 * @param data */ public void onLoadCaches(String data) {}; /** * 当调用服务器接口成功获取数据时,调用这个方法 * @param data */ public void onSuccess(String data) {}; /** * 当调用服务器接口获取数据失败时,调用这个方法 * @param error 出错原因 * @param message 出错原因描述 */ public void onFailure(String error, String message) {}; /** * 加载完成时调用 */ public void onFinish() {}; }
相关文章
- android 获取当前屏幕显示的Activity
- Android:双击退出应用的实现
- Android轻松实现RecyclerView悬浮条
- WeakReference 在android中的应用
- React Native调用Android相机图库
- 腾讯应用宝Android 应用加固(乐固)操作说明(转)
- Android应用打包安装过程具体解释
- Android移动应用基础教程【使用内容提供者共享数据】
- Android jetpack liveData 写一个定时器应用
- Android studio中配置opencv,不需要opencv manager,手机上直接运行,亲测有效
- Android 翻倍提高编译速度
- Manifest merger failed : Attribute meta-data#android.support.FILE_PROVIDER_PATHS@resource value=(@xm
- 【Android UI】Canvas 画布 ⑤ ( Canvas 坐标系 | Canvas 绘图坐标系变换示例 )
- Android 获取系统时间及时间戳转换
- Android Activity之间切换出现短暂黑屏的处理方法
- Android开发中常见的设计模式
- 八个造成 Android 应用内存泄露的原因
- Android 应用白屏、黑屏、闪屏解决方法 (秒开应用思路)
- 【Android 应用开发】Canvas 精准绘制文字 ( 文本边界坐标解析 | 绘图位置 )
- 【ijkplayer】编译 Android 版本的 ijkplayer ① ( Ubuntu 安装 Git 软件 | 下载 ijkplayer 代码 )
- Android中的Animation应用
- Android并发编程之白话文详解Future,FutureTask和Callable
- 【我的Android进阶之旅】推荐一款能提升数十倍效率的Android应用开发助手
- 我的Android进阶之旅------>Android中查看应用签名信息
- 我的Android进阶之旅------>Android ListView 应用解析(使用ArrayAdapter,SimpleAdapter和SimpleCursorAdapter适配器)