AsyncHttpClient是一款比较流行的Android异步网路加载库,在github上的网址是:https://github.com/loopj/android-async-http
但是AsyncHttpClient和另外比较著名的Android异步网络库 Volley和Glide不同的是,不像Volley和Glide内部已经实现好了缓存策略,AsyncHttpClient自身没有实现缓存策略。
实验可以表明这点。
实验方法:我写一个简单的Android小程序,仅仅加载一张从网络获取的图片(我的CSDN博客头像),在联网时候启动这个程序,然后关闭手机设备的所以网络连接,此时再次启动该程序。
先给出测试的程序所有代码:
测试的主Activity:MainActivity.java
1 package com.zzw.testasynchttpclient; 2 3 import org.apache.http.Header; 4 5 import com.loopj.android.http.AsyncHttpClient; 6 import com.loopj.android.http.AsyncHttpResponseHandler; 7 8 import android.app.Activity; 9 import android.graphics.Bitmap; 10 import android.graphics.BitmapFactory; 11 import android.os.Bundle; 12 import android.text.method.ScrollingMovementMethod; 13 import android.widget.ImageView; 14 import android.widget.TextView; 15 import android.widget.Toast; 16 17 public class MainActivity extends Activity { 18 19 @Override 20 protected void onCreate(Bundle savedInstanceState) { 21 super.onCreate(savedInstanceState); 22 setContentView(R.layout.activity_main); 23 24 ImageView imageView = (ImageView) findViewById(R.id.imageView); 25 26 TextView textView = (TextView) findViewById(R.id.textView); 27 // 设置下拉 28 textView.setMovementMethod(ScrollingMovementMethod.getInstance()); 29 30 useAsyncHttpClientGetString("http://www.cnblogs.com/zzw1994", textView); 31 32 useAsyncHttpClientGetImage("http://pic.cnblogs.com/avatar/822717/20151120000857.png", imageView); 33 34 } 35 36 private void useAsyncHttpClientGetString(String url, TextView textView) { 37 38 final TextView mTextView = textView; 39 // 第一步,得到AsyncHttpClient对象 40 AsyncHttpClient asyncHttpClient = new AsyncHttpClient(); 41 // 第二步,通过url获取数据 42 asyncHttpClient.get(url, new AsyncHttpResponseHandler() { 43 44 // 成功后返回的数据处理 45 @Override 46 public void onSuccess(int statusCode, Header[] headers, byte[] response) { 47 mTextView.setText(new String(response)); 48 } 49 50 // 失败后返回的数据处理 51 @Override 52 public void onFailure(int statusCode, Header[] headers, byte[] response, Throwable error) { 53 Toast.makeText(getApplicationContext(), "请求失败", 1).show(); 54 } 55 }); 56 } 57 58 private void useAsyncHttpClientGetImage(String url, ImageView imageView) { 59 final ImageView mImageView = imageView; 60 61 // 第一步,得到AsyncHttpClient对象 62 AsyncHttpClient asyncHttpClient = new AsyncHttpClient(); 63 // 第二步,通过url获取数据 64 asyncHttpClient.get(url, new AsyncHttpResponseHandler() { 65 // 成功后返回的数据处理 66 @Override 67 public void onSuccess(int statusCode, Header[] headers, byte[] response) { 68 BitmapFactory bitmapFactor = new BitmapFactory(); 69 Bitmap bitmap = bitmapFactor.decodeByteArray(response, 0, response.length); 70 mImageView.setImageBitmap(bitmap); 71 } 72 73 // 失败后返回的数据处理 74 @Override 75 public void onFailure(int statusCode, Header[] headers, byte[] response, Throwable error) { 76 Toast.makeText(getApplicationContext(), "加载失败", 1).show(); 77 } 78 }); 79 } 80 81 }
activity_main.xml:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="vertical" > 6 7 <TextView 8 android:id="@+id/textView" 9 android:layout_width="match_parent" 10 android:layout_height="wrap_content" 11 android:layout_weight="1" 12 android:scrollbars="vertical" 13 android:singleLine="false" /> 14 15 <ImageView 16 android:id="@+id/imageView" 17 android:layout_width="match_parent" 18 android:layout_height="wrap_content" 19 android:layout_weight="1" /> 20 21 </LinearLayout>
最后不要忘记加权限:
1 <uses-permission android:name="android.permission.INTERNET" />