Android中Http网络请求库框架Volley和Asnyc-http的使用---第三方库学习笔记(一)
Volley框架:
特點:
缺點:
不適合數據的上傳和下載,不適合大數據和流媒體的網絡請求。
基本介紹:
1.Volley的get和post請求方式的使用:
StringRequest:對請求的數據返回結果類型不確定時使用
JsonObjectRequest:確定返回數據為JsonObject類型時使用
JsonArrayRequest:確定返回的數據是JsonArray時使用
2.回調的使用:
當我們請求成功,失敗,請求重試等回調方法
3.Volley的網絡請求隊列的建立和取消隊列請求:
在使用Volley時,首先要建立一個全局的請求隊列。然后在建立請求,將請求加入請求隊列中,這樣整個app的請求是通過這個隊列來管理的,方便取消某個請求或者取消所有請求的操作。
4.Volley和Activity生命周期的聯動:
volley請求的生命周期與Activity的生命周期是關聯在一起的??梢栽贏ctivity銷毀時,同時關閉請求,防止在后臺運行這個請求,造成內存溢出。
在volley請求的生命周期與Activity的生命周期關聯的時候,設置Tag標簽,因為請求的關閉需要通過Tag標簽在請求隊列中查找,然后再Activity的onStop()方法里執行取消請求。
5.Volley的簡單的二次回調封裝:
使用自定義的,方便進行全局的管理
Volley框架基本使用方法例子:
package com.example.volleytest1;import java.util.HashMap; import java.util.Map;import org.json.JSONObject;import com.android.volley.RequestQueue; import com.android.volley.Request.Method; import com.android.volley.AuthFailureError; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.ImageLoader; import com.android.volley.toolbox.ImageLoader.ImageCache; import com.android.volley.toolbox.ImageLoader.ImageListener; import com.android.volley.toolbox.JsonObjectRequest; import com.android.volley.toolbox.NetworkImageView; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley;import android.os.Bundle; import android.app.Activity; import android.graphics.Bitmap; import android.support.v4.util.LruCache; import android.view.Menu; import android.widget.ImageView; import android.widget.Toast;/*** Volley是Android平臺網絡通信庫:更快,更簡單,更健壯* * @author Administrator* */ public class MainActivity extends Activity {private ImageView imageView;private NetworkImageView networkImageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();getJSONVolley();loadImageVolley();NetWorkImageViewVolley();}private void initView() {imageView = (ImageView) findViewById(R.id.imageView);networkImageView = (NetworkImageView) findViewById(R.id.networkImageView);}// 使用Volley做Json字符串的請求public void getJSONVolley() {//建立請求隊列RequestQueue requestQueue = Volley.newRequestQueue(this);String JSONDateUrl = "http://apis.juhe.cn/mobile/get?";//參數意義:請求方式、Url、請求成功的回調方法,請求失敗的回調方法StringRequest jsonObjectRequest = new StringRequest(Method.POST,JSONDateUrl, new Response.Listener<String>() {@Overridepublic void onResponse(String arg0) {System.out.println(arg0);Toast.makeText(MainActivity.this, arg0, Toast.LENGTH_LONG).show();}}, new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError arg0) {System.out.println(arg0.toString());Toast.makeText(MainActivity.this, arg0.toString(), Toast.LENGTH_LONG).show();}}){@Overrideprotected Map<String, String> getParams()throws AuthFailureError {Map<String,String> map = new HashMap<String, String>();map.put("phone", "15211807740");map.put("key", "2d35800313209bff48674f203fb38b91");return map;}};//設置Tag標簽jsonObjectRequest.setTag("aaa");//將請求加入到請求隊列中requestQueue.add(jsonObjectRequest);}//使用Volley做圖片的請求public void loadImageVolley() {String url = "http://g.hiphotos.baidu.com/image/pic/item/c2fdfc039245d688427eb40ca1c27d1ed21b241d.jpg";RequestQueue requestQueue = Volley.newRequestQueue(this);final LruCache<String, Bitmap> lurCache = new LruCache<String, Bitmap>(20);ImageCache imageCache = new ImageCache() {@Overridepublic void putBitmap(String key, Bitmap value) {lurCache.put(key, value);}@Overridepublic Bitmap getBitmap(String key) {return lurCache.get(key);}};ImageLoader imageLoader = new ImageLoader(requestQueue, imageCache);ImageListener listener = imageLoader.getImageListener(imageView,R.drawable.ic_launcher, R.drawable.ic_launcher);imageLoader.get(url, listener);}//使用NetWorkImageView完成圖片加載//NetWorkImageView是Volley提供的一個控件,是用來替代ImageView的//NetWorkImageVIew控件的優點:當父類控件dispatch時,NetWorkImageView控件會自動取消網絡請求,所以不用擔心生命周期問題public void NetWorkImageViewVolley(){String imageUrl = "http://img2.3lian.com/2014/f7/5/d/22.jpg";RequestQueue requestQueue = Volley.newRequestQueue(this);final LruCache<String, Bitmap> lruCache = new LruCache<String, Bitmap>(20);ImageCache imageCache = new ImageCache() {@Overridepublic void putBitmap(String key, Bitmap value) {lruCache.put(key, value);}@Overridepublic Bitmap getBitmap(String key) {return lruCache.get(key);}};ImageLoader imageLoader = new ImageLoader(requestQueue, imageCache);networkImageView.setTag("networkimageview");networkImageView.setImageUrl(imageUrl, imageLoader);}}運行結果:
對上邊代碼中 使用Volley做Json字符串的請求部分 的回調做二次回調封裝:
SecondActivity類:
RequestUtils類:
package com.test.volleytest2;import java.util.Map;import android.content.Context;import com.android.volley.Request.Method; import com.android.volley.AuthFailureError; import com.android.volley.RequestQueue; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley;public class RequestUtils {public static void getVolley(Context context,String url,final Map<String,String> map,MyListener listener){RequestQueue queues = Volley.newRequestQueue(context);StringRequest stringRequest = new StringRequest(Method.POST, url, listener.requestSuccess(), listener.requestFailure()){@Overrideprotected Map<String, String> getParams() throws AuthFailureError {return map;}};stringRequest.setTag("abc");queues.add(stringRequest);queues.start();}}MyListener類:
package com.test.volleytest2;import com.android.volley.Response.ErrorListener;import com.android.volley.Response.Listener;import com.android.volley.VolleyError;public abstract class MyListener{private Listener<String> listener;private ErrorListener errorListener;public abstract void success(String info);public abstract void failure(VolleyError errorInfo);public Listener<String> requestSuccess(){listener = new Listener<String>() {@Overridepublic void onResponse(String arg0) {success(arg0);}};return listener;}public ErrorListener requestFailure(){errorListener = new ErrorListener() {@Overridepublic void onErrorResponse(VolleyError arg0) {failure(arg0);}};return errorListener;}}運行結果:
Async-http網絡框架
高效的網絡數據請求,文件的上傳和下載
特點:
二進制文件(圖片等)的下載,使用BinaryHttpResponseHandler
使用Get/Post請求數據的基本操作:
對上邊例子中的Get/Post方法中的請求回調進行二次封裝:
SecondActivity類:
RequestUtils類:
package com.test.asncyhttptest;import com.loopj.android.http.AsyncHttpClient; import com.loopj.android.http.RequestParams;public class RequestUtils {public static AsyncHttpClient client = new AsyncHttpClient();public static void ClientGet(String url,NetCallBack callback){client.get(url, callback);}public static void ClientPost(String url,RequestParams params,NetCallBack callback){client.post(url, params, callback);}}NetCallBack類:
package com.test.asncyhttptest;import com.loopj.android.http.AsyncHttpResponseHandler;public abstract class NetCallBack extends AsyncHttpResponseHandler{public abstract void RequestSuccess(String info);public abstract void RequestFailure(String info);@Overridepublic void onStart() {super.onStart();System.out.println("請求開始");}@Overridepublic void onSuccess(String arg0) {super.onSuccess(arg0);System.out.println("請求成功");RequestSuccess(arg0);}@Overridepublic void onFailure(Throwable arg0, String arg1) {super.onFailure(arg0, arg1);System.out.println("請求失敗");RequestFailure(arg0.toString());}}運行結果:
總結
以上是生活随笔為你收集整理的Android中Http网络请求库框架Volley和Asnyc-http的使用---第三方库学习笔记(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java虚拟机内存区域---学习笔记
- 下一篇: Android网络图片加载缓存处理库的使