最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android中Volley框架進行請求網(wǎng)絡數(shù)據(jù)的使用

 更新時間:2016年10月27日 11:15:18   作者:liu_jing_hui  
這篇文章主要介紹了Android中Volley框架進行請求網(wǎng)絡數(shù)據(jù)的使用,本文給大家介紹的非常詳細具有參考借鑒價值,需要的朋友可以參考下

問題的闡述:Android SDK中的HttpClient和HttpUrlConnection兩種請求方式用來處理網(wǎng)絡的復雜的操作,但當應用比較復雜的時候需要我們編寫大量的代碼處理很多東西:圖像緩存,請求的調(diào)度等等;

解決:Volley就是為解決這些而生,它與2013年Google I/O大會上被提出:使得Android應用網(wǎng)絡操作更方便更快捷;抽象了底層Http Client等實現(xiàn)的細節(jié),讓開發(fā)者更專注與產(chǎn)生RESTful Request。另外,Volley在不同的線程上異步執(zhí)行所有請求而避免了阻塞主線程。

Volley可以說是把AsyncHttpClient和Universal-Image-Loader的優(yōu)點集于了一身,既可以像AsyncHttpClient一樣非常簡單地進行HTTP通信,也可以像Universal-Image-Loader一樣輕松加載網(wǎng)絡上的圖片。除了簡單易用之外,Volley在性能方面也進行了大幅度的調(diào)整,它的設計目標就是非常適合去進行數(shù)據(jù)量不大,但通信頻繁的網(wǎng)絡操作,而對于大數(shù)據(jù)量的網(wǎng)絡操作,比如說下載文件等,Volley的表現(xiàn)就會非常糟糕

這里寫圖片描述

1、Volley到底有哪些特點呢?

自動調(diào)度網(wǎng)絡請求

多個并發(fā)的網(wǎng)絡連接

通過使用標準的HTTP緩存機制保持磁盤和內(nèi)存響應的一致

支持請求優(yōu)先級

支持取消請求的強大API,可以取消單個請求或多個

易于定制

健壯性:便于正確的更新UI和獲取數(shù)據(jù)

包含調(diào)試和追蹤工具

2、Volley中的RequestQueue 和 Request

● RequestQueue 用來執(zhí)行請求的請求隊列

● Request 用來構(gòu)造一個請求對象

● Request對象主要有以下幾種類型:

a. StringRequest 響應的主體為字符串

b. JsonArrayRequest 發(fā)送和接收JSON數(shù)組

c. JsonObjectRequest 發(fā)送和接收JSON對象

d. ImageRequest 發(fā)送和接收Image

3、Volley的使用步驟:

(1)創(chuàng)建一個Android項目,并導入volley的jar包

這里寫圖片描述

(2)GET的請求方式:

//創(chuàng)建RequestQueue對象
RequestQueue requestQueue = Volley.newRequestQueue(this);
String url="http://api.m.panda.tv/ajax_get_all_subcate?__version=1.0.1.1300&__plat=android";
//創(chuàng)建request對象
StringRequest request=new StringRequest(url, new Response.Listener<String>() {
/**
* 請求成功的結(jié)果
* @param response 這個參數(shù)就是訪問網(wǎng)絡數(shù)據(jù)的結(jié)果
*/
@Override
public void onResponse(String response) {
// 
}
}, new Response.ErrorListener() {
/**
* 這個方法用來監(jiān)聽訪問錯誤,展示的結(jié)果
* 07-19 04:17:13.414: E/tag(1181): -------------
* com.android.volley.VolleyError: 
* java.lang.SecurityException: 
* Permission denied (missing INTERNET permission?)==========================
*/
@Override
public void onErrorResponse(VolleyError error) {
Log.e("tag","-------------"+ error+"==========================");
}
});
//將Request對象添加到RequestQueue里面。
requestQueue.add(request);

(3)Post請求的方式:

通過指定請求方法為Request.Method.POST使其成為post請求,然后重新getParams方法設置請求參數(shù)。當發(fā)出POST請求的時候,Volley會嘗試調(diào)用StringRequest的父類——Request中的getParams()方法來獲取POST參數(shù)。

//創(chuàng)建RequestQueue對象 
RequestQueue requestQueue = Volley.newRequestQueue(this); 
String url=”http://api.m.panda.tv/ajax_get_all_subcate”; 
StringRequest request=new StringRequest(Request.Method.POST, url, new Response.Listener() {
@Override
public void onResponse(String response) {
Log.e("tag", "請求成功============"+response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("tag", "請求成功============"+error);
}
}){
/**
* 重寫getParams方法設置參數(shù),post添加參數(shù)的方法
*/
@Override
protected Map<String, String> getParams() throws AuthFailureError {
HashMap<String, String> params = new HashMap<String,String>();
params.put("__version", "1.0.1.1300");
params.put("__plat", "android");
return params;
}
};
requestQueue.add(request);

(3)加載圖片的方式:

第一種加載圖片的方法

RequestQueue requestQueue = Volley.newRequestQueue(context);
String img = datas.getImg();
//第三第四個參數(shù)分別用于指定允許圖片最大的寬度和高度,如果指定的網(wǎng)絡圖片的寬度或高度大于這里的最大值,則會對圖片進行壓縮,指定成0的話就表示不管圖片有多大,都不會進行壓縮。
//第五個參數(shù)用于指定圖片的顏色屬性
ImageRequest request=new ImageRequest(img, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
holder.iv.setImageBitmap(response);
}
}, 0, 0,Bitmap.Config.ARGB_8888, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
}
});
requestQueue.add(request);

第二種加載圖片的方法

其實加載圖片的功能還遠遠不止這些,使用ImageLoader可以實現(xiàn)對圖片的緩存,還可以過濾重復鏈接,避免發(fā)送重復的請求

ImageLoader的使用方法概括為以下幾步

1. 創(chuàng)建一個RequestQueue對象。

2. 創(chuàng)建一個ImageLoader對象。

3. 獲取一個ImageListener對象。

4. 調(diào)用ImageLoader的get()方法加載網(wǎng)絡上的圖片。

//繼承ImageCache,使用LruCache實現(xiàn)緩存
public class BitmapCache implements ImageLoader.ImageCache {
private LruCache<String, Bitmap> mCache;
public BitmapCache() {
int maxSize = 10 * 1024 * 1024;
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);
}
}
private void getImageByImageLoader() {
ImageView iv= (ImageView) findViewById(R.id.iv);
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
String url = "https://www.baidu.com/img/bdlogo.png";
ImageLoader loader=new ImageLoader(queue,new BitmapCache() );
// 第一個參數(shù)指定用于顯示圖片的ImageView控件
// 第二個參數(shù)指定加載圖片的過程中顯示的圖片
// 第三個參數(shù)指定加載圖片失敗的情況下顯示的圖片
ImageLoader.ImageListener listener=ImageLoader.getImageListener(iv,R.mipmap.ic_launcher,R.mipmap.ic_launcher);
// 調(diào)用ImageLoader的get()方法來加載圖片
// 第一個參數(shù)就是圖片的URL地址
// 第二個參數(shù)則是剛剛獲取到的ImageListener對象
// 如果想對圖片的大小進行限制,也可以使用get()方法的重載,指定圖片允許的最大寬度和高度,即通過第三第四個參數(shù)指定
loader.get(url,listener);
}

第三種加載圖片的方法

最后,Volley提供了一種自定義ImageView來加載圖片,其使用方法可概括為

1. 創(chuàng)建一個RequestQueue對象。

2. 創(chuàng)建一個ImageLoader對象。

3. 在布局文件中添加一個NetworkImageView控件。

4. 在代碼中獲取該控件的實例。

5. 設置要加載的圖片地址。

步驟一:我們在布局中申明該控件

<com.android.volley.toolbox.NetworkImageView
android:id="@+id/network_image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
/>

步驟二:在程序中實現(xiàn)加載

public void networkImageView(){
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
ImageLoader loader=new ImageLoader(queue,new BitmapCache() );
NetworkImageView niv= (NetworkImageView) findViewById(R.id.network_image_view);
niv.setDefaultImageResId(R.mipmap.ic_launcher);//設置加載中顯示的圖片
niv.setErrorImageResId(R.mipmap.ic_launcher);//設置加載失敗時顯示的圖片
niv.setImageUrl("https://www.baidu.com/img/bdlogo.png", loader);//設置目標圖片的URL地址
}

4、自定義Request

在實際應用中,往往需要將http請求與json進行集成,而Volley正恰恰支持這樣的方式,不過需要我們自己自定義Request,這里我們使用google的Gson庫進行集成。

1. 繼承Request類

2. 重寫parseNetworkResponse,實現(xiàn)json與實體類轉(zhuǎn)換,由于實體類未定,所以采用泛型
下文用到的json字符串如下

{“name”:”lizhangqu”,”age”:16}

步驟一:

package cn.edu.zafu.http;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.toolbox.HttpHeaderParser;
import com.google.gson.Gson;
import java.io.UnsupportedEncodingException;
/**
* Created by lizhangqu on 2015/5/7.
*/
public class GsonRequest<T> extends Request<T> {
private final Response.Listener<T> mListener;
private Gson mGson;
private Class<T> mClass;
public GsonRequest(int method, String url, Class<T> clazz, Response.Listener<T> listener,
Response.ErrorListener errorListener) {
super(method, url, errorListener);
mGson = new Gson();
mClass = clazz;
mListener = listener;
}
public GsonRequest(String url, Class<T> clazz, Response.Listener<T> listener,
Response.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);
}
}

步驟二:編寫測試實體類,兩個字段一個name一個age

package cn.edu.zafu.http;
/**
* Created by lizhangqu on 2015/5/7.
*/
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}

步驟三:調(diào)用方法和StringRequest是一樣的。如下所示

private void json(){
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
String url = "http://121.41.119.107/test/index.php";
GsonRequest<Person> request=new GsonRequest<Person>(url, Person.class, new Response.Listener<Person>() {
@Override
public void onResponse(Person response) {
Log.d("TAG",response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
queue.add(request);
}

以上所述是小編給大家介紹的Android中Volley框架進行請求網(wǎng)絡數(shù)據(jù)的使用,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

  • android自定義View圓圈拖動

    android自定義View圓圈拖動

    這篇文章主要為大家詳細介紹了android自定義View圓圈拖動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Templates實戰(zhàn)之更優(yōu)雅實現(xiàn)自定義View構(gòu)造方法詳解

    Templates實戰(zhàn)之更優(yōu)雅實現(xiàn)自定義View構(gòu)造方法詳解

    本篇文章介紹如何利用Android Studio提供的Live Templates更優(yōu)雅實現(xiàn)自定義View的構(gòu)造方法,說句人話就是:簡化自定義View構(gòu)造參數(shù)模板代碼的編寫,實現(xiàn)自動生成,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Android AutoValue使用和擴展庫

    Android AutoValue使用和擴展庫

    今天小編就為大家分享一篇關于Android AutoValue使用和擴展庫的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Android掃描和生成二維碼

    Android掃描和生成二維碼

    這篇文章主要為大家詳細介紹了Android掃描二維碼和生成二維碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Android自定義ProgressDialog加載圖片

    Android自定義ProgressDialog加載圖片

    這篇文章主要介紹了Android自定義ProgressDialog系統(tǒng)加載框,通過本文大家可以嘗試利用Android自定義ProgressDialog,感興趣的小伙伴們可以參考一下
    2016-05-05
  • android Setting中隱藏項實現(xiàn)原理與代碼

    android Setting中隱藏項實現(xiàn)原理與代碼

    我們都知道做程序員有時會就像android中,程序員在setting中就隱藏這樣一項,接下來將詳細介紹,感興趣的朋友可以了解下哦
    2013-01-01
  • android handler.post和handler.sendMessage的區(qū)別和聯(lián)系

    android handler.post和handler.sendMessage的區(qū)別和聯(lián)系

    handler.post和handler.sendMessage本質(zhì)上是沒有區(qū)別的,都是發(fā)送一個消息到消息隊列中,而且消息隊列和handler都是依賴于同一個線程的。接下來通過本文給大家分享android handler.post和handler.sendMessage的區(qū)別和聯(lián)系,一起看看吧
    2017-08-08
  • Android獲取手機通訊錄、sim卡聯(lián)系人及調(diào)用撥號界面方法

    Android獲取手機通訊錄、sim卡聯(lián)系人及調(diào)用撥號界面方法

    這篇文章主要介紹了Android獲取手機通訊錄、sim卡聯(lián)系人及調(diào)用撥號界面方法,本文分別給出實現(xiàn)代碼實現(xiàn)獲取通訊錄和sim卡的聯(lián)系人,以及權(quán)限配置和調(diào)用系統(tǒng)撥打電話的界面的實現(xiàn)代碼,需要的朋友可以參考下
    2015-04-04
  • Android開發(fā)之Android studio的安裝與使用

    Android開發(fā)之Android studio的安裝與使用

    本文是此系列文章的第一篇,主要給大家講述的是Android studio的安裝與使用,十分的詳細,有需要的小伙伴可以參考下
    2016-02-02
  • 最新評論

    湄潭县| 新密市| 抚松县| 栾城县| 观塘区| 平江县| 介休市| 庆城县| 天门市| 长春市| 沙洋县| 永兴县| 墨脱县| 孝昌县| 湛江市| 子洲县| 丹阳市| 弋阳县| 丽江市| 五寨县| 池州市| 上虞市| 德兴市| 宜宾市| 仁布县| 手机| 辛集市| 乡宁县| 台东市| 镇坪县| 拜城县| 宽甸| 昭苏县| 米脂县| 贵阳市| 通海县| 陆川县| 将乐县| 若羌县| 伊川县| 墨江|