volley的正確使用方式

源碼下載:https://github.com/heinika/android-volley

導入的三種方式:
在dependencies下搜索
導入源碼包,import model  在dependencies導入model
導入jar,放在lib目錄下

networkimageview防止內存溢出
先下載,判斷內存,不夠就壓縮圖片

volley實現方式(如上圖):
先找緩存
後訪問網絡
使用起來非常簡單:
先寫一個單例,保證只有一個RequestQueue
public class MySingleton {
private static MySingleton mInstance;
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private static Context mCtx;

private MySingleton(Context context) {
mCtx = context;
mRequestQueue = getRequestQueue();

mImageLoader = new ImageLoader(mRequestQueue,
new ImageLoader.ImageCache() {
private final LruCache<String, Bitmap>
cache = new LruCache<String, Bitmap>(20);

@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}

@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url, bitmap);
}
});

}

public static synchronized MySingleton getInstance(Context context) {
if (mInstance == null) {
mInstance = new MySingleton(context);
}
return mInstance;
}

public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
// getApplicationContext() is key, it keeps you from leaking the
// Activity or BroadcastReceiver if someone passes one in.
mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
}
return mRequestQueue;
}

public <T> void addToRequestQueue(Request<T> req) {
getRequestQueue().add(req);
}

public ImageLoader getImageLoader() {
return mImageLoader;
}
}
再在主函數中使用
case R.id.button_volley_connect:
/**
* 應該創建單例防止出現多個RequestQueue
*/
// RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
MySingleton singleton = MySingleton.getInstance(getApplicationContext());
RequestQueue queue = singleton.getRequestQueue();
StringRequest request = new StringRequest(Request.Method.POST, "http://192.168.0.30:8080/MyWebTest/MyTestServerlet", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
mTextViewVolley.setText(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
mTextViewVolley.setText("網絡連接失敗"+error.toString());
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap map = new HashMap();
map.put("username","heinika");
return map;
}
};
singleton.addToRequestQueue(request);
break;
case R.id.button_networkimageview:
mNetworkImageView.setImageUrl("http://f.hiphotos.baidu.com/news/w%3D638/sign=38984923f5deb48ffb69a2ddc81e3aef/b03533fa828ba61e6db11b6d4734970a304e5911.jpg"
,MySingleton.getInstance(getApplicationContext()).getImageLoader());
break;
default:
break;
}
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章