`
renyuan_1991
  • 浏览: 70496 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android-async-http使用和取消请求

阅读更多
android-async-http使用总结
下载最新的包可以到github:https://github.com/loopj/android-async-http
官方说明文档:http://loopj.com/android-async-http

将jar包添加到项目里面就可以开始使用了:
第一步:
按照官方推荐,创建一个静态的请求对象.添加基本请求功能
public class MyBaseRequest {

	public static AsyncHttpClient client = new AsyncHttpClient(); // 实例话对象
	
	static {
		client.setTimeout(10000); // 设置链接超时,如果不设置,默认为10s
	}

	public static void post(Context context,String url, RequestParams params,
			AsyncHttpResponseHandler handler) {
		client.post(context,url, params,handler);
	}

	public static void get(String urlString, JsonHttpResponseHandler res) // 不带参数,获取json对象或者数组
	{
		client.get(urlString, res);
	}

	public static void get(String urlString, RequestParams params,
			JsonHttpResponseHandler res) // 带参数,获取json对象或者数组
	{
		client.get(urlString, params, res);
	}

	public static void get(String uString, BinaryHttpResponseHandler bHandler) // 下载数据使用,会返回byte数据
	{
		client.get(uString, bHandler);
	}

	public static AsyncHttpClient getClient() {
		return client;
	}

以上只列举了get和post这两种请求方式的常用方法,一般这两个方法就够用了,详细方法可以去官网查看。
第二步,发起请求
MyBaseRequest.post(context,url,params,new AsyncHttpResponseHandler() {
			@Override
			public void onStart() {
				super.onStart();
				System.out.println("start"+url);
			}
			@Override
			public void onSuccess(int statusCode, Header[] headers,byte[] responseBody) {
			}
			
			@Override
			public void onFailure(int statusCode, Header[] headers,
					byte[] responseBody, Throwable throwable) {
			}
			@Override
				public void onFinish() {
					// TODO Auto-generated method stub
					super.onFinish();
				}
		});

一共有四个回调的方法分别是 发起请求、请求成功、请求失败、请求完成。不管请求失败还是成功都会调用请求完成这个方法。
在请求成功是得到的byte[]我们可以通过String(bytes, "UTF-8")这个方法将它转换成String类型的字符串。也可以调用可以直接返回String类型数据的post或者get方法。
第三步:将cookie保存在本地
	public static PersistentCookieStore myCookieStore = new PersistentCookieStore(BaseApplication.getApplication().getApplicationContext());
	public static AsyncHttpClient client = new AsyncHttpClient(); // 实例话对象
	
	static {
		client.setTimeout(10000); // 设置链接超时,如果不设置,默认为10s
	}

	public static RequestHandle post(Context context,String url, RequestParams params,
			AsyncHttpResponseHandler handler) {
		client.setCookieStore(myCookieStore);
		client.setMaxRetriesAndTimeout(0, 10000);
		// 固定的请求头设置
		return client.post(context,url, params,handler);
	}

通过以上代码的设置,任何从服务器端获取的cookie都会持久化存储到myCookieStore中。
也可以在cookie中添加我们自定义的数据,如下:
BasicClientCookie newCookie = new BasicClientCookie("cookiesare", "awesome");
newCookie.setVersion(1);
newCookie.setDomain("mydomain.com");
newCookie.setPath("/");
myCookieStore.addCookie(newCookie);

第三步:取消发送的请求
android-async-http能被取消请求的请求必须传入一个Context,否则则没有任何效果。
实例代码如下:
@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Button btn_one = (Button) findViewById(R.id.btn_one);
		btn_one.setOnClickListener(this);
		Button btn_two = (Button) findViewById(R.id.btn_two);
		btn_two.setOnClickListener(this);
		
		
		RequestParams params = new RequestParams();
		System.out.println("请求一开始");
		requestOne(this,"http://blog.csdn.net/hil2000/article/details/13949513",params);
//		requestOne.cancel(true);
		System.out.println("请求二开始");
		requestTwo(this,"http://www.ithao123.cn/content-2670929.html",params);
//		requestTwo.cancel(true);
		MyBaseRequest.client.cancelAllRequests(true);
	}

	private void requestOne(Context context,final String url,final RequestParams params) {
		requestOne = 
			MyBaseRequest.post(context,url,params,new AsyncHttpResponseHandler() {
			@Override
			public void onStart() {
				super.onStart();
				System.out.println("start"+url);
			}
			@Override
			public void onSuccess(int statusCode, Header[] headers,byte[] responseBody) {
				try {
					String info = MyBaseRequest.getStringFromByte(responseBody);
					System.out.println("请求 One 的结果");
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}
			}
			
			@Override
			public void onFailure(int statusCode, Header[] headers,
					byte[] responseBody, Throwable throwable) {
				System.out.println("请求 One 失败");
			}
		});
	}
	private void requestTwo(Context context,final String url,final RequestParams params) {
		requestTwo = 
			MyBaseRequest.post(context,url,params,new AsyncHttpResponseHandler() {
			@Override
			public void onStart() {
				super.onStart();
				System.out.println("start"+url);
			}
			@Override
			public void onSuccess(int statusCode, Header[] headers,byte[] responseBody) {
				try {
					String info = MyBaseRequest.getStringFromByte(responseBody);
					System.out.println("请求 Two 的结果");
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}
			}
			
			@Override
			public void onFailure(int statusCode, Header[] headers,
					byte[] responseBody, Throwable throwable) {
				System.out.println("请求 Two 失败");
			}
		});
	}

本框架一共提供了三中取消请求的方法:
1.cancelRequests(Context context, boolean mayInterruptIfRunning);//在AsyncHttpClient中
2.cancelAllRequests(boolean mayInterruptIfRunning);//在AsyncHttpClient中
3.cancel(boolean mayInterruptIfRunning) //在RequestHandle中
在本例中使用了第二种和第三种。第一种(cancelRequests)和第二种(cancelAllRequests)的效果是一样的,都用来取消全部请求。而第三种取消方式(cancel(boolean mayInterruptIfRunning) //在RequestHandle中)是用来取消单个请求的。
    转载请注明出处:http://renyuan-1991.iteye.com/blog/2249325
    希望爱好编程的小伙伴能加这个群,互相帮助,共同学习。群号: 141877583
0
1
分享到:
评论

相关推荐

    android-async-http-1.4.3-master.zip

    implementation 'com.loopj.android:android-async-http:1.4.9' // 注意版本可能已更新,使用时请检查最新版本 } ``` 然后,发起一个GET请求的示例如下: ```java AsyncHttpClient client = new AsyncHttpClient...

    android-async-http progress-wheel测试程序

    `android-async-http`是一个流行的开源库,它简化了Android应用程序中的HTTP请求处理。这个库由Loopj开发,提供了简单易用的API,支持GET、POST等HTTP方法,同时允许在请求过程中进行回调,处理进度更新或错误。 `...

    Android Async-Http Demo

    "Android Async-Http Demo"是一个基于Android平台的示例项目,展示了如何使用Async-Http库来实现高效、非阻塞的HTTP网络请求。这个Demo旨在帮助开发者理解并实践异步HTTP通信的基本原理和最佳实践。 Async-Http库,...

    android-async-http 安卓异步http框架

    1. **内存管理**:由于Android-Async-Http使用了线程池,开发者需要关注内存占用,确保及时释放不再使用的资源。 2. **网络权限**:确保在AndroidManifest.xml中添加了INTERNET权限,否则请求将无法执行。 3. **...

    android-async-http-master

    总结,`android-async-http-master`作为一款成熟的Android异步HTTP库,以其简洁的API和全面的功能,为开发者提供了便捷的网络请求解决方案。通过理解并熟练使用这个库,我们可以更加高效地构建网络驱动的Android应用...

    android-async-http:.zip

    5. **上传/下载文件**:`android-async-http`提供了`put()`和`get()`方法处理文件上传和下载,使用`FileEntity`作为请求实体。 四、性能优化 1. **连接池管理**:`AsyncHttpClient`内置了连接池管理,可以减少建立...

    android-async-http-master.zip

    1. 参数与Header:Android-Async-Http支持添加请求参数和Header,如`request.addParam("key", "value")`和`request.setHeader("Content-Type", "application/json")`。 2. 文件上传与下载:库提供了方便的文件上传...

    Android代码-Android-Http-Example

    集成了android-async-http, volley, okhttp3等网络请求框架.可直接切换底层库. 1 简介 架构分层 总共分为三层: 网络请求调用层. app统一调用该层接口和这层提供的回调,该层可以切换不同的网络请求库. 网络请求库...

    android-clean-http-async-task.7z

    总的来说,“android-clean-http-async-task.7z”这个压缩包可能包含了如何在Android应用中优雅地处理HTTP异步任务的相关代码示例和最佳实践。开发者可以通过学习这些内容,提升自己在Android网络编程方面的技能,...

    rxjava-async-util-0.18.0.zip

    标题中的"rxjava-async-util-0.18.0.zip"表明这是一个关于RxJava异步工具库的版本0.18.0的压缩包。RxJava是一个在Java虚拟机上运行的反应式编程库,它允许开发人员通过观察者模式处理事件和数据流。异步工具库通常...

    android asynchttp

    3. **添加回调**:为HTTP请求设置监听器,一般包括`RequestHandle`(用于取消请求)、`HttpResponseCallback`(处理请求成功或失败的情况)。在回调中,我们可以获取服务器的响应,解析JSON或其他格式的数据,验证...

    android利用Async 和Gson框架的网络请求

    本教程将深入探讨如何结合使用Android的AsyncTask和Gson框架进行网络请求。 AsyncTask是Android SDK提供的一种轻量级机制,用于在后台线程执行耗时操作,如网络请求,然后在UI线程更新结果,避免了主线程被阻塞导致...

    六款值得推荐的android(安卓)开源框架简介

     (2) 网络请求的排序(scheduling) (3) 网络请求的优先级处理 (4) 缓存 ...2、android-async-http 项目地址:https://github.com/loopj/android-async-http文档介绍:http://loopj.com/android-async-http/  

    Android Async异步通信框架

    8. **取消请求** 如果需要取消一个正在进行的请求,AsyncHttpClient提供了`cancelRequests()`方法,可以基于tag或者完全取消所有请求。 9. **与其他库集成** Android AsyncHttpClient可以与OkHttp、Volley等其他...

    Android-CoroutineAutoDispose是一个用于自动处理的KotlinCoroutine库

    Android开发中的KotlinCoroutine库是现代Android应用中广泛使用的异步编程工具,它极大地简化了后台任务的执行和管理。Coroutine AutoDispose库是这个生态系统的一部分,专为了解决生命周期管理和资源清理的问题。在...

    Android-展示Android的单向数据流架构由KotlinCoroutines提供支持

    这个项目可能展示了如何在Android应用中设置和使用Kotlin Coroutines,以及如何将其应用于单向数据流架构。文件列表可能包括以下几个部分: 1. **Model**:包含获取数据的类或接口,如`ApiService`用于网络请求,`...

    Android 常用六大框架

    (5) 多级别取消请求 (6) 和Activity和生命周期的联动(Activity结束时同时取消所有网络请求) 2、android-async-http 项目地址:https://github.com/loopj/android-async-http 文档介绍:...

    Android-根据kotlin的协程设计简单实现java的协程设计并且提供kotlin版本和java版本

    在Android开发中,Kotlin的协程是一种强大的工具,它能帮助开发者解决异步编程中的复杂性和回调地狱问题。协程允许我们以同步的方式编写异步代码,提高代码的可读性和可维护性。本项目的目标是根据Kotlin的协程设计...

    kotlin-flow-android-demo:使用Kotlin Flow演示Android应用

    在Android开发中,Kotlin Flow已经成为处理异步操作和数据流的一种流行方式。Kotlin Flow是一种可暂停和恢复的序列,它可以优雅地处理错误,并且与协程(coroutines)结合,提供了更好的并发模型。本项目"**kotlin-...

    Android_Async_Example:使用 Android AsyncTask 的 Android 应用示例

    在Android开发中,异步处理是一项至关重要的...总之,`Android_Async_Example`项目提供了使用AsyncTask进行异步操作的一个直观示例,通过学习和实践,开发者可以更好地理解和掌握在Android应用中处理后台任务的方法。

Global site tag (gtag.js) - Google Analytics