<pre name="code" class="java">需求:1.多线程并发请求(顺序显示出来) 2.图片压缩(保证不失真 100K*100000 流量)3.本地缓存(谷歌的做法URLCode)
思路:
>1界面必须使用NetworkImageView
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/iv_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
>2public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//初始化
RequestManager.DEFAULT_CONTENT_CHARSET="UTF-8";
RequestManager.init(getBaseContext());
}
}
>3使用ImageLoader载入
ImageLoader imageLoader = RequestManager.getImageLoader();
mImageView.setImageUrl(url,图片地址 imageLoader载入器);
}
>4GsonRequest<ImageResult> get = new GsonRequest<ImageResult> 请求服务端 请求成功获取数据
5listview.setAdapter(new ArrayAdapter<ImageInfo>(//适配器装载视图数据(优化a.可回收convertVIewb.HolderView
//调用volley显示
holder.image.setImageUrl("http://192.168.10.100:8080/img/" + info.url,//
loader);
代码练习:
<pre name="code" class="java">public class MainActivity extends Activity {
private ListView listview;
private ImageLoader loader = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_volley_imagelist);
loader = RequestManager.getImageLoader();
String url = "http://192.168.10.100:8080/web/ImageListServlet";
listview = (ListView) findViewById(R.id.listview);
Response.Listener<ImageResult> listener = new Response.Listener<ImageResult>() {
@Override
public void onResponse(ImageResult bean) {
// 接着操作UI
System.out.println(bean);
showListView(bean);
}
};
Response.ErrorListener errorListener = new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError e) {
e.printStackTrace();
}
};
GsonRequest<ImageResult> get = new GsonRequest<ImageResult>(//
Method.GET,//
url,// 地址
ImageResult.class, // Class<?>用来反射赋值
null, // 添加请求
listener, // 成功
errorListener)// 失败
;
RequestManager.addRequest(get, MainActivity.this);
}
@Override
protected void onDestroy() {
super.onDestroy();
RequestManager.cancelAll(MainActivity.this);
}
private void showListView(final ImageResult bean) {
listview.setAdapter(new ArrayAdapter<ImageInfo>(//
getBaseContext(),//
0,// 不需要视图由getView决定
bean.list// 数据
) {
class ViewHolder {
public NetworkImageView image;
public TextView name;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = View.inflate(getBaseContext(), R.layout.list_item_imageinfo, null);
holder.image = (NetworkImageView) convertView.findViewById(R.id.left_ic);
holder.name = (TextView) convertView.findViewById(R.id.name);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
ImageInfo info = bean.list.get(position);
holder.name.setText(info.displayname);
//调用volley显示
holder.image.setImageUrl("http://192.168.10.100:8080/img/" + info.url,//
loader);
return convertView;
}
});
}