日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開源 > 綜合技術(shù) > Android Volley框架詳解

Android Volley框架詳解

來源:程序員人生   發(fā)布時(shí)間:2014-10-13 03:06:43 閱讀次數(shù):2524次

注:文章出自http://blog.csdn.net/guolin_blog/article/details/17482095,有興趣可以先去閱讀。

Volley簡(jiǎn)介

對(duì)于Android系統(tǒng)網(wǎng)絡(luò)通信,我們知道目前用的最普遍的就是HttpClient和HttpURLConnection,但是HttpURLConnection和HttpClient的用法還是稍微有些復(fù)雜的,需要我們?nèi)シ庋b代碼,減少冗余度。Google開發(fā)團(tuán)隊(duì)也看到了這個(gè)問題,所以在2013年Google I/O大會(huì)上推出了一個(gè)新的網(wǎng)絡(luò)通信框架――Volley,Volley集成了AsyncHttpClient框架和Universal-Image-Loader為一體,在性能方面也進(jìn)行了大幅度的調(diào)整,非常適合去進(jìn)行數(shù)據(jù)量不大,但通信頻繁的網(wǎng)絡(luò)操作。

Volley下載

①.如果你的電腦安裝過git,請(qǐng)使用如下命令

git clone https://android.googlesource.com/platform/frameworks/volley

②.如果你的電腦沒安裝git,請(qǐng)到此地址下載

Volley使用流程

 ①.創(chuàng)建RequestQueue對(duì)象
 ②.創(chuàng)建Request對(duì)象
 ③.將Request對(duì)象加入RequestQueue

Volley自帶請(qǐng)求

 1.StringRequest ---請(qǐng)求字符串

private void requestStringData() { RequestQueue mRequestQueue = Volley.newRequestQueue(this); // 指定請(qǐng)求方式,攜帶請(qǐng)求參數(shù) StringRequest mRequest = new StringRequest(Method.POST, "http://www.baidu.com", new Response.Listener<String>() { @Override public void onResponse(String response) { Log.d(TAG, response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.d(TAG, error.getMessage(), error); } } ) { @Override protected Map<String, String> getParams() throws AuthFailureError { Map<String, String> mParams = new HashMap<String, String>(); mParams.put("params1", "value1"); mParams.put("params2", "value2"); return mParams; } }; mRequestQueue.add(mRequest); }

除了我們上面講到的Volley處理流程之外,如果要添加請(qǐng)求參數(shù)的話,我們可以去重寫它的getParams方法。

2.JsonRequest ---請(qǐng)求Json對(duì)象

private void requestJosnObjectData() { RequestQueue mRequestQueue = Volley.newRequestQueue(this); JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://m.weather.com.cn/data/101010100.html", 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); } }); mRequestQueue.add(jsonObjectRequest); }

3.JsonArrayRequest ---請(qǐng)求json數(shù)組

 略

4.ImageRequest ---請(qǐng)求圖片(1)

private void showImage() { RequestQueue mRequestQueue = Volley.newRequestQueue(this); ImageRequest mImageRequest = new ImageRequest("http://www.baidu.com/img/bdlogo.png", new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap response) { imageView.setImageBitmap(response); } }, 0, 0, Config.RGB_565, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.i(TAG, error.getMessage(), error); } }); mRequestQueue.add(mImageRequest); }

5.ImageLoader ---請(qǐng)求圖片(2)

private void showImage2() { networkImageView.setVisibility(View.GONE); // 1. 創(chuàng)建一個(gè)RequestQueue對(duì)象。 RequestQueue mRequestQueue = Volley.newRequestQueue(this); // 2. 創(chuàng)建一個(gè)ImageLoader對(duì)象。 ImageLoader mImageLoader = new ImageLoader(mRequestQueue, new BitmapCache()); // 3. 獲取一個(gè)ImageListener對(duì)象。 ImageListener imageListener = ImageLoader.getImageListener(imageView, R.drawable.image_default, R.drawable.image_error); // 4. 調(diào)用ImageLoader的get()方法加載網(wǎng)絡(luò)上的圖片。 //mImageLoader.get("http://www.baidu.com/img/bdlogo.png", imageListener); mImageLoader.get("http://www.baidu.com/img/bdlogo.png", imageListener, 200, 200); }

6.NetworkImageView ---請(qǐng)求圖片(3)

<com.android.volley.toolbox.NetworkImageView android:id="@+id/iv_network" android:layout_width="200dp" android:layout_height="200dp" > </com.android.volley.toolbox.NetworkImageView>
private void showImage3() { imageView.setVisibility(View.GONE); //1. 創(chuàng)建一個(gè)RequestQueue對(duì)象。 RequestQueue mRequestQueue = Volley.newRequestQueue(this); //2. 創(chuàng)建一個(gè)ImageLoader對(duì)象。 ImageLoader mImageLoader = new ImageLoader(mRequestQueue, new BitmapCache()); //3. 在布局文件中添加一個(gè)NetworkImageView控件。 //4. 在代碼中獲取該控件的實(shí)例。 //5. 設(shè)置要加載的圖片地址。 networkImageView.setDefaultImageResId(R.drawable.image_default); networkImageView.setErrorImageResId(R.drawable.image_error); networkImageView.setImageUrl("http://www.baidu.com/img/bdlogo.png", mImageLoader); }

指定自己的Volley請(qǐng)求(XmlRequest 

public class XMLRequest extends Request<XmlPullParser> { private final Listener<XmlPullParser> mListener; public XMLRequest(int method, String url, Listener<XmlPullParser> listener, ErrorListener errorListener) { super(method, url, errorListener); mListener = listener; } public XMLRequest(String url, Listener<XmlPullParser> listener, ErrorListener errorListener) { this(Method.GET, url, listener, errorListener); } @Override protected Response<XmlPullParser> parseNetworkResponse(NetworkResponse response) { try { String xmlString = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); XmlPullParser xmlPullParser = Xml.newPullParser(); xmlPullParser.setInput(new StringReader(xmlString)); return Response.success(xmlPullParser, HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (XmlPullParserException e) { return Response.error(new ParseError(e)); } } @Override protected void deliverResponse(XmlPullParser response) { mListener.onResponse(response); } }

private void requestXml() { RequestQueue mRequestQueue = Volley.newRequestQueue(this); XMLRequest xmlRequest = new XMLRequest("http://flash.weather.com.cn/wmaps/xml/china.xml", new Response.Listener<XmlPullParser>() { @Override public void onResponse(XmlPullParser response) { XmlParser(response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // TODO Auto-generated method stub } }); mRequestQueue.add(xmlRequest); }

指定自己Request(GsonRequest 

注:需要導(dǎo)入gson.jar

public class GsonRequest<T> extends Request<T> { private final Listener<T> mListener; private Gson mGson; private Class<T> mClass; public GsonRequest(int method, String url, Class<T> clazz, Listener<T> listener, ErrorListener errorListener) { super(method, url, errorListener); mGson = new Gson(); mClass = clazz; mListener = listener; } public GsonRequest(String url, Class<T> clazz, Listener<T> listener, ErrorListener errorListener) { this(Method.GET, url, clazz, listener, errorListener); } @Override protected Response<T> parseNetworkResponse(NetworkResponse response) { try { String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); return Response.success(mGson.fromJson(jsonString, mClass), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } } @Override protected void deliverResponse(T response) { mListener.onResponse(response); } }
private void requestGson() { RequestQueue mRequestQueue = Volley.newRequestQueue(this); GsonRequest<Weather> gsonRequest = new GsonRequest<Weather>("http://www.weather.com.cn/data/sk/101010100.html", Weather.class, new Response.Listener<Weather>() { @Override public void onResponse(Weather weather) { WeatherInfo weatherInfo = weather.getWeatherinfo(); Log.d(TAG, "city is " + weatherInfo.getCity()); Log.d(TAG, "temp is " + weatherInfo.getTemp()); Log.d(TAG, "time is " + weatherInfo.getTime()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("TAG", error.getMessage(), error); } }); mRequestQueue.add(gsonRequest); }

框架運(yùn)行機(jī)制


源代碼總結(jié):

1. RequestQueue requestQueue = Volley.newRequestQueue(this);

 ①.stack == null,判斷這個(gè)版本9,確定使用HttpURLConnection還是HttpClient

 ②.根據(jù)stack創(chuàng)建NetWork對(duì)象

 ③.創(chuàng)建RequestQueue,并start<創(chuàng)建一個(gè)緩存線程CacheDispatcher和四個(gè)網(wǎng)絡(luò)線程N(yùn)etworkDispatcher>

2. requestQueue.add(request);

 ①.判斷是否可以緩存,如果可以,加入緩存隊(duì)列,否則,加入網(wǎng)絡(luò)請(qǐng)求隊(duì)列。request.setShouldCache(false);
 ②.緩存線程會(huì)一直在后臺(tái)運(yùn)行,不斷的取出響應(yīng)結(jié)果,是否為null,是否過期,兩者不成立則Request.parseNetworkResponse()
 ③.網(wǎng)絡(luò)請(qǐng)求線程也是在不斷的運(yùn)行的,會(huì)調(diào)用Network.performRequest()去發(fā)送請(qǐng)求,將請(qǐng)求結(jié)果封裝成NetworkResponse對(duì)象返回
 ④.調(diào)用Request.parseNetworkResponse解析NetworkResponse
 ⑤.調(diào)用ExecutorDelivery.postResponse()回調(diào)解析出的數(shù)據(jù)
 ⑥.調(diào)用Request.deliverResponse()方法
 ⑦.最后我們?cè)僭谶@個(gè)方法中將響應(yīng)的數(shù)據(jù)回調(diào)到Response.Listener的onResponse()方法

Volley1源碼下載(StringRequest,JsonRequest,JsonArrayRequest)

Volley2源碼下載(ImageRequest,ImageLoader,NetWorkImageView)

Volley3源碼下載(XmlRequest,GsonRequest)

Volley4源碼下載(運(yùn)行機(jī)制)

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 亚洲精品视频免费观看 | av成人一区二区 | 成人在线观看www | 欧美精品一二三 | 免费中文字幕av | 日韩91| 成人av中文字幕 | 国产激情二区 | av无遮挡 | 成人影院免费观看 | 色婷婷丁香 | 欧美日韩综合在线 | 操操日| 久久久久久久久久久网站 | 国产成人av在线 | 国产成人在线一区二区 | 国产青青视频 | 日韩高清影片在线观看 | 可以免费看av | 日韩精品中文字幕一区二区 | 国产一区二区三区免费观看 | 男人天堂av网站 | 精品粉嫩aⅴ一区二区三区四区 | 狠狠地操 | 久久国产精品99久久久久久牛牛 | 欧美日韩激情在线一区二区三区 | 成人av电影在线观看 | 久久精品亚洲一区 | 国产伦精品一区二区三区精品视频 | 黄色aaa大片 | 亚欧洲精品视频在线观看 | 精品免费国产一区二区三区四区 | 久久成人久久爱 | 日本一区二区三区免费观看 | 日韩1区 | 亚洲国产成人精品女人 | 亚州成人 | 成人黄色电影在线观看 | 99在线看 | 一极黄色大片 | 欧美日韩一区三区 |