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

Android開發(fā)中使用Volley庫發(fā)送HTTP請求的實例教程

 更新時間:2016年05月06日 15:18:45   投稿:goldensun  
這篇文章主要介紹了Android開發(fā)中使用Volley庫發(fā)送HTTP請求的實例教程,包括創(chuàng)建Volley單例的基本知識與取消Request請求的技巧等,需要的朋友可以參考下

Android Volley 是Google開發(fā)的一個網絡lib,可以讓你更加簡單并且快速的訪問網絡數據。Volley庫的網絡請求都是異步的,你不必擔心異步處理問題。
Volley的優(yōu)點:

  • 請求隊列和請求優(yōu)先級
  • 請求Cache和內存管理
  • 擴展性性強
  • 可以取消請求

下載和編譯volley.jar
需要安裝git,ant,android sdk
clone代碼:

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

編譯jar:

android update project -p . ant jar

添加volley.jar到你的項目中
不過已經有人將volley的代碼放到github上了:
https://github.com/mcxiaoke/android-volley,你可以使用更加簡單的方式來使用volley:
Maven
format: jar

<dependency>
  <groupId>com.mcxiaoke.volley</groupId>
  <artifactId>library</artifactId>
  <version>1.0.6</version>
</dependency>

Gradle
format: jar

compile 'com.mcxiaoke.volley:library:1.0.6'

Volley工作原理圖

201656151349558.jpg (1428×802)

創(chuàng)建Volley 單例
使用volley時,必須要創(chuàng)建一個請求隊列RequestQueue,使用請求隊列的最佳方式就是將它做成一個單例,整個app使用這么一個請求隊列。

public class AppController extends Application {

public static final String TAG = AppController.class
    .getSimpleName();

private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;

private static AppController mInstance;

@Override
public void onCreate() {
  super.onCreate();
  mInstance = this;
}

public static synchronized AppController getInstance() {
  return mInstance;
}

public RequestQueue getRequestQueue() {
  if (mRequestQueue == null) {
    mRequestQueue = Volley.newRequestQueue(getApplicationContext());
  }

  return mRequestQueue;
}

public ImageLoader getImageLoader() {
  getRequestQueue();
  if (mImageLoader == null) {
    mImageLoader = new ImageLoader(this.mRequestQueue,
        new LruBitmapCache());
  }
  return this.mImageLoader;
}

public <T> void addToRequestQueue(Request<T> req, String tag) {
  // set the default tag if tag is empty
  req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
  getRequestQueue().add(req);
}

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

public void cancelPendingRequests(Object tag) {
  if (mRequestQueue != null) {
    mRequestQueue.cancelAll(tag);
  }
}
}

另外,你還需要一個Cache來存放請求的圖片:

public class LruBitmapCache extends LruCache<String, Bitmap> implement ImageCache {
  public static int getDefaultLruCacheSize() {
    final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
    final int cacheSize = maxMemory / 8;

    return cacheSize;
  }

  public LruBitmapCache() {
    this(getDefaultLruCacheSize());
  }

  public LruBitmapCache(int sizeInKiloBytes) {
    super(sizeInKiloBytes);
  }

  @Override
  protected int sizeOf(String key, Bitmap value) {
    return value.getRowBytes() * value.getHeight() / 1024;
  }

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

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

別忘記在AndroidManifest.xml文件中添加android.permission.INTERNET權限。

HTTP請求實例

  private Context mContext;
  private RequestQueue mRequestQueue;
  private StringRequest mStringRequest;

  // 利用Volley實現Post請求
  private void volley_post() {
    String url = "http://aplesson.com/wap/api/user.php?action=login";
    mContext = this;
    mRequestQueue = Volley.newRequestQueue(mContext);
    mStringRequest = new StringRequest(Method.POST, url,
        new Response.Listener<String>() {
          @Override
          public void onResponse(String response) {
            System.out.println("請求結果:" + response);
          }
        }, new Response.ErrorListener() {
          @Override
          public void onErrorResponse(VolleyError error) {
            System.out.println("請求錯誤:" + error.toString());
          }
        }) {
      // 攜帶參數
      @Override
      protected HashMap<String, String> getParams()
          throws AuthFailureError {
        HashMap<String, String> hashMap = new HashMap<String, String>();
        hashMap.put("un", "852041173");
        hashMap.put("pw", "852041173abc");
        return hashMap;
      }

      // Volley請求類提供了一個 getHeaders()的方法,重載這個方法可以自定義HTTP 的頭信息。(也可不實現)
      public Map<String, String> getHeaders() throws AuthFailureError {
        HashMap<String, String> headers = new HashMap<String, String>();
        headers.put("Accept", "application/json");
        headers.put("Content-Type", "application/json; charset=UTF-8");
        return headers;
      }

    };

    mRequestQueue.add(mStringRequest);

  }

  private JsonObjectRequest mJsonObjectRequest;

  // 利用Volley實現Json數據請求
  private void volley_json() {
    mContext = this;
    String url = "http://aplesson.com/data/101010100.html";
    // 1 創(chuàng)建RequestQueue對象
    mRequestQueue = Volley.newRequestQueue(mContext);
    // 2 創(chuàng)建JsonObjectRequest對象
    mJsonObjectRequest = new JsonObjectRequest(url, null,
        new Response.Listener<JSONObject>() {
          @Override
          public void onResponse(JSONObject response) {
            System.out.println("請求結果:" + response.toString());
          }
        }, new Response.ErrorListener() {
          @Override
          public void onErrorResponse(VolleyError error) {
            System.out.println("請求錯誤:" + error.toString());
          }
        });

    // 3 將JsonObjectRequest添加到RequestQueue
    mRequestQueue.add(mJsonObjectRequest);

  }

  // 利用Volley實現Get請求
  private void volley_get() {
    mContext = this;
    String url = "http://www.aplesson.com/";
    // 1 創(chuàng)建RequestQueue對象
    mRequestQueue = Volley.newRequestQueue(mContext);
    // 2 創(chuàng)建StringRequest對象
    mStringRequest = new StringRequest(url,
        new Response.Listener<String>() {
          @Override
          public void onResponse(String response) {
            System.out.println("請求結果:" + response);
          }
        }, new Response.ErrorListener() {
          @Override
          public void onErrorResponse(VolleyError error) {
            System.out.println("請求錯誤:" + error.toString());
          }
        });
    // 3 將StringRequest添加到RequestQueue
    mRequestQueue.add(mStringRequest);
  }


Volley提供了JsonObjectRequest、JsonArrayRequest、StringRequest等Request形式。JsonObjectRequest:返回JSON對象。
JsonArrayRequest:返回JsonArray。
StringRequest:返回String,這樣可以自己處理數據,更加靈活。
另外可以繼承Request<T>自定義Request。

取消Request
Activity里面啟動了網絡請求,而在這個網絡請求還沒返回結果的時候,Activity被結束了,此時如果繼續(xù)使用其中的Context等,除了無辜的浪費CPU,電池,網絡等資源,有可能還會導致程序crash,所以,我們需要處理這種一場情況。使用Volley的話,我們可以在Activity停止的時候,同時取消所有或部分未完成的網絡請求。Volley里所有的請求結果會返回給主進程,如果在主進程里取消了某些請求,則這些請求將不會被返回給主線程。Volley支持多種request取消方式。
可以針對某些個request做取消操作:

 @Override
  public void onStop() {
    for (Request <?> req : mRequestQueue) {
      req.cancel();
    }
  }

取消這個隊列里的所有請求:

 @Override
  protected void onStop() {
    // TODO Auto-generated method stub
    super.onStop();
    mRequestQueue.cancelAll(this);
  }

可以根據RequestFilter或者Tag來終止某些請求

 @Override
  protected void onStop() {
    // TODO Auto-generated method stub
    super.onStop();

    mRequestQueue.cancelAll( new RequestFilter() {});
    or
    mRequestQueue.cancelAll(new Object());
  }

Volley支持http的GET、POST、PUT、DELETE等方法。


相關文章

  • Android中TextView和ImageView實現傾斜效果

    Android中TextView和ImageView實現傾斜效果

    這篇文章主要為大家詳細介紹了Android中TextView和ImageView實現傾斜效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Android使用Canvas對象實現刮刮樂效果

    Android使用Canvas對象實現刮刮樂效果

    這篇文章主要介紹了Android使用Canvas對象實現刮刮樂效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 簡單掌握Android Widget桌面小部件的創(chuàng)建步驟

    簡單掌握Android Widget桌面小部件的創(chuàng)建步驟

    這篇文章主要介紹了簡單掌握Android Widget桌面小部件的創(chuàng)建步驟,Widget一般采用web前端技術進行開發(fā),需要的朋友可以參考下
    2016-03-03
  • Android中顯示GIF動畫的實現代碼

    Android中顯示GIF動畫的實現代碼

    這篇文章主要介紹了Android中顯示GIF動畫的實現代碼,較為詳細的分析了Android調用GIF動畫所涉及的頁面布局及功能實現技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • Android懸浮窗屏蔽懸浮窗外部所有的點擊事件的實例代碼

    Android懸浮窗屏蔽懸浮窗外部所有的點擊事件的實例代碼

    這篇文章主要介紹了Android懸浮窗屏蔽懸浮窗外部所有的點擊事件實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • Android應用App更新實例詳解

    Android應用App更新實例詳解

    現在一般的Android軟件都是需要不斷更新的,當你打開某個app的時候,如果有新的版本,它會提示你有新版本需要更新。該項目實現的就是這個功能。下面跟著小編一起來看下吧
    2017-03-03
  • Android中RecyclerView實現簡單購物車功能

    Android中RecyclerView實現簡單購物車功能

    這篇文章主要為大家詳細介紹了Android中RecyclerView實現簡單購物車功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Android12四大組件之Activity生命周期變化詳解

    Android12四大組件之Activity生命周期變化詳解

    雖然說我們天天都在使用Activity,但是你真的對Activity的生命機制完全了解了嗎?Activity的生命周期方法只有七個,但是其實那只是默認的情況。也就是說在其他情況下,Activity的生命周期可能不會是按照我們以前所知道的流程,本章著重講解Activity的生命周期變化
    2022-07-07
  • 詳解Android的登錄那點事

    詳解Android的登錄那點事

    本篇為大家介紹的內容包括:1、用戶連續(xù)多次輸錯密碼,增加驗證碼驗證;2、Android如何通過http請求達到與服務器之間的通訊。內容簡單,便于學習。
    2016-12-12
  • Android獲取應用程序大小的方法

    Android獲取應用程序大小的方法

    這篇文章主要介紹了Android獲取應用程序大小的方法,有需要的朋友可以參考一下
    2014-01-01

最新評論

红河县| 临安市| 西贡区| 图们市| 柘城县| 恭城| 乌拉特中旗| 静乐县| 深泽县| 河间市| 连城县| 阿图什市| 彭山县| 濮阳县| 玉门市| 姚安县| 永昌县| 普定县| 渭南市| 星子县| 皋兰县| 抚宁县| 界首市| 崇州市| 北碚区| 华蓥市| 城口县| 卢湾区| 兰西县| 安康市| 视频| 孙吴县| 巫山县| 正阳县| 荥经县| 黑河市| 方山县| 东阳市| 辉县市| 神木县| 潜江市|