`
renyuan_1991
  • 浏览: 69419 次
  • 性别: 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 源码

    https://oss.sonatype.org/content/repositories/snapshots/com/loopj/android/android-async-http/ Maven URL: https://oss.sonatype.org/content/repositories/snapshots/ GroupId: com.loopj.android ArtifactId...

    安卓网站交互JSONxmlWebserviceUPnP相关-android-async-http是Android上的一个异步基于回调的HTTP客户端开发包建立在Apache的HttpClient库上.zip

    android-async-http是Android上的一个异步、基于回调的HTTP客户端开发包,建立在Apache的HttpClient库上.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

    android-async-http官方项目

    android-async-http官方项目:来自Github; 该项目中包含了多个版本的android-async-http.jar包,目前最新版本是:android-async-http-1.4.5.jar; 地址:原项目地址:https://github.com/loopj/android-async-http

    android-async-http-1.4.5.jar

    最新异步网络请求android-async-http-1.4.5.jar

    android-async-http-1.4.3最新jar包

    android的异步网络加载,方便使用,免去多余的代码

    android-async-http-1.4.9下载

    android-async-http 1.4.9版本,附带了其依赖的httpclient包

    android-async-http

    android-async-http开源框架可以是我们轻松的获取网络数据或者向服务器发送数据,使用起来也很简单,具体详细使用看官网:https://github.com/loopj/android-async-http

    Android-async-http-1.4.9.jar

    android-async-http-1.4.9.jar是一般使用Apache HTTP Client或者采用HttpURLConnect,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使用android-async-http这个库可以大大的简化操作,它是...

    android-async-http-1.4.11.zip

    1)包里包含android-async-http-1.4.11.jar 和 httpclient-4.5.8.jar两个文件 2)强大的网络请求库,主要特征如下: 处理异步Http请求,并通过匿名内部类处理回调结果 Http请求均位于非UI线程,不会阻塞UI操作 通过...

    android-async-http的jar包

    android.async.http.jar包 包含1.2.0 至 1.4.8 版本。

    android-async-http-1.4.8.jar

    强大的网络请求库,主要特征如下: 处理异步Http请求,并通过匿名内部类处理回调结果 Http请求均位于非UI线程,不会阻塞UI操作 通过线程池处理并发请求 处理文件上传、下载 响应结果自动打包JSON格式 自动处理连接...

    android-async-http.jar

    android-async-http-1.4.8.jar提供下载学习和使用,其中还有别的版本可以使用

    android-async-http-1.4.9

    使用android-async-http这个库可以大大的简化操作,它是基于Apache’s HttpClient ,所有的请求都是独立在UI主线程之外,通过回调方法处理请求结果,采用android Handler message 机制传递信息

    android-async-http-1.4.6.jar

    比较好用的安卓异步下载包,android-async-http-1.4.6.jar

    android-async-http-1.4.6

    android-async-http是专门针对Android在Apache的HttpClient基础上构建的异步http连接。所有的请求全在UI(主)线程之外执行,而callback使用了Android的Handler发送消息机制在创建它的线程中执行。

    Android Async-Http Demo

    Android Async-Http Demo

    android-async-http-1.4.4

    使用android-async-http这个库可以大大的简化操作,它是基于Apache’s HttpClient ,所有的请求都是独立在UI主线程之外,通过回调方法处理请求结果,采用android Handler message 机制传递信息

    android-async-http-master

    android-async-http开源框架可以是我们轻松的获取网络数据或者向服务器发送数据,使用起来也很简单

    android-async-http访问webservice

    网上的ksoap2访问webservice得自己写线程,线程自己控制有点问题,所以自己组装一下开源android-async-http,可以访问webservice.使用时候需要一定的Android开发经验才能使用

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

    android-async-http 和圆形滚动条开源项目的测试程序。

Global site tag (gtag.js) - Google Analytics