您好,登錄后才能下訂單哦!
1.Get方法獲取字符串:
public void loadGetJson(String url) { //創建RequestQueue對象,一個activity創建一個對象即可 RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext()); //創建get方法的json請求對象 StringRequest sr = new StringRequest(url, new Listener<String>() { @Override public void onResponse(String response) { Log.e("onResponse", "" + response); } }, new ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("onErrorResponse", "" + error.toString()); } }); //將請求對象加入到請求隊列里 mQueue.add(sr); }
2.指定get或者post方法獲取字符串
(1)get方法
RequestQueue requestQueue = Volley.newRequestQueue(this); StringRequest sRequest=new StringRequest(Request.Method.GET,CITY_CODE_URL, new Listener<String>() { @Override public void onResponse(String response) { System.out.println(response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError arg0) { System.out.println("sorry,Error"); } }); sRequest.setShouldCache(false); requestQueue.add(sRequest);
(2)post方法
StringRequest中并沒有提供設置POST參數的方法,但是當發出POST請求的時候,Volley會嘗試調用StringRequest的父類——Request中的getParams()方法來獲取POST參數,那么解決方法自然也就有了,我們只需要在StringRequest的匿名類中重寫getParams()方法,在這里設置POST參數就可以了,代碼如下所示:
StringRequest stringRequest = new StringRequest(Method.POST, url, listener, errorListener) { @Override protected Map<String, String> getParams() throws AuthFailureError { Map<String, String> map = new HashMap<String, String>(); map.put("params1", "value1"); map.put("params2", "value2"); return map; } };
完整范例如下:
public void loadPostLogin(String url) { RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext()); StringRequest sr = new StringRequest(Request.Method.POST, url, new Listener<String>() { @Override public void onResponse(String response) { Log.e("onResponse", "" + response); } }, new ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("onErrorResponse", "" + error.toString()); } }) { @Override protected Map<String, String> getParams() throws AuthFailureError { Map<String, String> map = new HashMap<String, String>(); map.put("UserName", "glblong"); map.put("PassWord", "123456"); return map; } }; mQueue.add(sr); }
3.JsonObjectRequest和JsonArrayRequest用法與StringRequest一致,方法如下:
第二個參數說明:
Constructor which defaults to GET if jsonRequest is null, POST otherwise.
默認情況下設成null為get方法,否則為post方法。
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Log.d("TAG", response.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("TAG", error.getMessage(), error); } });
4.ImageRequest用法
/** * 第三第四個參數分別用于指定允許圖片最大的寬度和高度,如果指定的網絡圖片的寬度或高度大于這里的最大值,則會對圖片進行壓縮, * 指定成0的話就表示不管圖片有多大,都不會進行壓縮。 * * @param url * 圖片地址 * @param listener * @param maxWidth * 指定允許圖片最大的寬度 * @param maxHeight * 指定允許圖片最大的高度 * @param decodeConfig * 指定圖片的顏色屬性,Bitmap.Config下的幾個常量. * @param errorListener */ public void getImgRequest(final ImageView iv, String url) { RequestQueue queue = Volley.newRequestQueue(getApplicationContext()); ImageRequest ir = new ImageRequest(url, new Listener<Bitmap>() { public void onResponse(Bitmap response) { iv.setImageBitmap(response); }; }, 0, 0, Config.RGB_565, new ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // TODO Auto-generated method stub } }); queue.add(ir); }
5. ImageLoader用法
ImageLoader比ImageRequest更加高效,因為它不僅對圖片進行緩存,還可以過濾掉重復的鏈接,避免重復發送請求。
//1.創建RequestQueue實例 RequestQueue queue = Volley.newRequestQueue(getApplicationContext()); //2.創建ImageLoader實例,ImageCache需要重寫才能實現緩存 ImageLoader il = new ImageLoader(queue, new ImageCache() { @Override public void putBitmap(String url, Bitmap bitmap) { // TODO Auto-generated method stub } @Override public Bitmap getBitmap(String url) { // TODO Auto-generated method stub return null; } }); //3.創建ImageListener實例,設置默認圖片和加載失敗圖片 ImageListener listener = ImageLoader.getImageListener(iv, R.drawable.img_loading, R.drawable.img_failed); //4.通過get方法加載圖片 il.get(url, listener);
使用范例代碼如下:
(1)先實現ImageCache接口
import android.graphics.Bitmap; import android.support.v4.util.LruCache; import com.android.volley.toolbox.ImageLoader.ImageCache; public class ImageLoaderCache implements ImageCache { private LruCache<String, Bitmap> mCache; public ImageLoaderCache() { int maxSize = 10 * 1024 * 1024;//設置緩存圖片的大小為10M mCache = new LruCache<String, Bitmap>(maxSize) { @Override protected int sizeOf(String key, Bitmap bitmap) { return bitmap.getRowBytes() * bitmap.getHeight(); } }; } @Override public Bitmap getBitmap(String url) { return mCache.get(url); } @Override public void putBitmap(String url, Bitmap bitmap) { mCache.put(url, bitmap); } }
(2)使用方法如下:
public void getImgLoader(ImageView iv,String url) { RequestQueue queue = Volley.newRequestQueue(getApplicationContext()); ImageLoader il = new ImageLoader(queue, new ImageLoaderCache()); ImageListener listener = ImageLoader.getImageListener(iv, R.drawable.img_loading, R.drawable.img_failed); //加載并限定圖片寬度和高度 il.get(url, listener, 200, 300); }
6.NetworkImageView的用法
NetworkImageView在加載圖片的時候會自動獲取自身控件的寬高,然后對比網絡圖片的寬度,再決定是否需要對圖片進行壓縮。也就是說,壓縮過程是在內部完全自動化的,并不需要我們關心,NetworkImageView會始終呈現給我們一張大小剛剛好的網絡圖片,不會多占用任何一點內存。
如果不想對圖片進行壓縮的話,只需要在布局文件中把NetworkImageView的layout_width和layout_height都設置成wrap_content就可以了,這樣NetworkImageView就會將該圖片的原始大小展示出來,不會進行任何壓縮。
(1)布局文件中添加NetworkImageView控件
<com.android.volley.toolbox.NetworkImageView android:id="@+id/networkImageView1" android:layout_width="120dp" android:layout_height="120dp" android:layout_centerHorizontal="true" android:layout_marginTop="60dp" android:src="@drawable/ic_launcher" />
2.代碼實現
RequestQueue queue = Volley.newRequestQueue(getApplicationContext()); ImageLoader p_w_picpathLoader = new ImageLoader(queue, new ImageLoaderCache()); NetworkImageView niv = (NetworkImageView) findViewById(R.id.networkImageView1); niv.setDefaultImageResId(R.drawable.img_loading); niv.setErrorImageResId(R.drawable.img_failed); niv.setImageUrl(url, p_w_picpathLoader);
7.取消請求
Volley提供了強大的API取消未處理或正在處理的請求。取消請求最簡單的方法是調用請求隊列cancelAll(tag)的方法,前提是你在添加請求時設置了標記。這樣就能使標簽標記的請求掛起。
給請求設置標簽:
request.setTag("My Tag");
使用ApplicationController添加使用了標簽的請求到隊列中:
ApplicationController.getInstance().addToRequestQueue(request, "My Tag");
取消所有指定標記的請求:
mRequestQueue.cancelAll("My Tag");
參考:
Android開源:網絡框架volley使用(一)---使用方法筆記
Android開源:網絡框架volley使用(二)---框架的自定義改造
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。