用ImageLoader缓存,volley网络请求百度api的图片显示在listview(demo)
首先看看引入的jar包:
然后我们新建一个Myapplication类,为了初始化volley和imageloader:
<span style="font-size:18px;">package com.example.picture;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import android.app.Application;
import android.content.Context;
public class MyApplication extends Application {
public static RequestQueue queues;
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
queues = Volley.newRequestQueue(getApplicationContext());
initImageLoader(this);
}
public static void initImageLoader(Context context) {
// This configuration tuning is custom. You can tune every option, you may tune some of them,
// or you can create default configuration by
// ImageLoaderConfiguration.createDefault(this);
// method.
ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(context);
config.threadPriority(Thread.NORM_PRIORITY - 2);
config.denyCacheImageMultipleSizesInMemory();//不会在内存中缓存多个大小的图�?
config.diskCacheFileNameGenerator(new Md5FileNameGenerator());//为了保证图片名称唯一
config.diskCacheSize(50 * 1024 * 1024); // 50 MiB
//内存缓存大小默认是:app可用内存�?1/8
config.tasksProcessingOrder(QueueProcessingType.LIFO);
config.writeDebugLogs(); // Remove for release app
// Initialize ImageLoader with configuration.
ImageLoader.getInstance().init(config.build());
// ImageLoader.getInstance().init( ImageLoaderConfiguration.createDefault(this));
}
public static RequestQueue getHttpQueues() {
return queues;
}
}
</span>
然后自己再封装一下volley:
<span style="font-size:18px;">package com.example.picture;
import java.util.HashMap;
import java.util.Map;
import android.content.Context;
import com.android.volley.AuthFailureError;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.StringRequest;
public class VolleyRequest {
public static StringRequest stringRequest;
public Context context;
static class MyStringRequest extends StringRequest {
public Map<String, String> headers = new HashMap<String, String>();
public MyStringRequest(int method, String url,
Listener<String> listener, ErrorListener errorListener) {
super(method, url, listener, errorListener);
// TODO Auto-generated constructor stub
}
//�еķ�����Ҫkey�����������һ��key����
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
// TODO Auto-generated method stub
return headers;
}
}
}
</span>
Mainactivity:
<span style="font-size:18px;">package com.example.picture;
import java.util.ArrayList;
import java.util.List;
import com.android.volley.Request;
import com.android.volley.VolleyError;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.example.picture.PictBean.javabean;
import com.example.picture.VolleyRequest.MyStringRequest;
import com.google.gson.Gson;
import com.nostra13.universalimageloader.core.ImageLoader;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
private ListView listview;
private String url ="http://apis.baidu.com/txapi/mvtp/meinv?num=20";
private List<javabean> list=new ArrayList<javabean>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview=(ListView) findViewById(R.id.listview);
initdata();
}
private void initdata() {
// TODO Auto-generated method stub
MyStringRequest myStringRequest=new MyStringRequest(Request.Method.GET, url, new Listener<String>() {
@Override
public void onResponse(String response) {
Gson gson = new Gson();
PictBean pictbean = gson.fromJson(response, PictBean.class);
//System.out.println(pictbean.newslist.get(0).title);
list.addAll(pictbean.newslist);
listview.setAdapter(new Myadapter(list));
System.out.println(list);
//System.out.println(response);
}
}, new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
}
});
myStringRequest.headers.put("apikey",
"b175540c4e40810cd78cc3e9fa4d936c");
MyApplication.getHttpQueues().add(myStringRequest);
}
class Myadapter extends BaseAdapter{
List<javabean> list;
public Myadapter(List<javabean> list) {
// TODO Auto-generated constructor stub
this.list=list;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View view;
if(convertView==null){
view=View.inflate(getApplicationContext(), R.layout.item_pic, null);
}else{
view=convertView;
}
TextView tv=(TextView) view.findViewById(R.id.tv);
ImageView iv=(ImageView) view.findViewById(R.id.iv);
tv.setText(list.get(position).title);
ImageLoader.getInstance().displayImage(list.get(position).picUrl, iv,ImageLoaderOptions.pager_options);
return view;
}
}
}
</span>