<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Android網絡請求(4) 網絡請求框架Volley

      Android網絡請求(4) 網絡請求框架Volley

      Volley是Google在2013年5月15日到17日在舊金山Moscone中心舉辦網絡開發者年會中推出的Android異步網絡加載框架和圖片加載框架,它特別適合數據體量小且通訊頻繁的網絡操作場景,而Android開發中大多數場景都是這樣的,但是如果讓它去進行文件上傳下載之類的大數據量網絡操作,那么他的表現將非常差。

      那么讓我們走進Volley,來熟悉一下它最基本的使用吧。值得一提的是,Volley提供了一個圖片加載框架NetworkImageView,我們也來一起了解一下吧。

      導入依賴

      Volley的歷史不短,但是它的修改卻很少,現在最高的版本也才1.2.1。我們使用的是1.1.1版本,現在build.gradle(app)中的dependencies中導入依賴

      implementation group: 'com.android.volley', name: 'volley', version: '1.1.1'
      

      網絡請求

      Get請求

      //      請求地址
              String src = "https://www.baidu.com";
      //      創建請求隊列
              RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
      //      創建請求
              StringRequest request = new StringRequest(src, new com.android.volley.Response.Listener<String>() {
                  @Override
                  public void onResponse(String response) {//成功時返回的response數據
                      String s = response.toString();
                      System.out.println(s);
                  }
              }, new Response.ErrorListener() {
                  @Override
                  public void onErrorResponse(VolleyError error) {//失敗時返回的error信息
                      String message = error.getMessage();
                      System.out.println(message);
                  }
              });
      //      將請求添加至隊列中,否則不會發起請求
              requestQueue.add(request);
      

      直接在MainActivity中進行網絡請求,這與我們之前的方式不太一樣,這是因為Volley請求代碼比OkHtpp還要簡短,監聽都可以new+空格+回車 自動彈出,我們只需要管理返回的數據即可,而且創建的請求隊列并不只能使用一次,這是一個隊列,可以加入多個請求,所以,我們只需要創建請求并且導入到這個隊列中即可。

      Post請求

      post請求比get請求多一些參數,首先就是在創建請求時要去指定請求為post,因為默認請求時get,其次需要重寫一個方法用于傳遞post請求所攜帶的參數,如果不這么做的話,就會報錯。

      //      請求地址
              String src = "https://xxx.xxx.com";
      //      創建請求隊列
              RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
      //      創建請求,添加請求類型
              StringRequest request = new StringRequest(Request.Method.POST   ,src, new com.android.volley.Response.Listener<String>() {
                  @Override
                  public void onResponse(String response) {//成功時返回的response數據
                      String s = response.toString();
                      System.out.println(s);
                  }
              }, new Response.ErrorListener() {
                  @Override
                  public void onErrorResponse(VolleyError error) {//失敗時返回的error信息
                      String message = error.getMessage();
                      System.out.println(message);
                  }
              }){
      //            post請求一定要傳入參數否則報錯
                  @Override
                  protected Map<String, String> getParams() throws AuthFailureError {
                      Map<String, String> map = new HashMap<>();
                      map.put("username","123456");
                      map.put("password","123456");
                      return map;
                  }
              };
      //      將請求添加至隊列中,否則不會發起請求
              requestQueue.add(request);
      

      Put請求

      Put請求就不說了,只需要修改請求方法即可

      Delete請求

      delete請求如果需要攜帶參數,可以在post請求的基礎上修改請求方法,如果不攜帶參數可以在get請求的基礎上添加請求方法。

      Json數據請求

      我們注意到了,我們返回的都是String類型的值,我們日常開發中返回的值大多數時json格式的,那么我們怎么樣去請求json數據呢。Volley提供了JsonObjectRequest和JsonArrayRequest這兩個類可用于返回json數據。它的使用方法和StringRequest是一樣的,只需要修改一些參數即可。另外他不在需要通過重寫方法來傳遞參數,可以直接將你需要的參數轉換成json格式,在實例化JsonObjectRequest時傳入

      Get請求

      //      請求地址
              String src = "https://www.baidu.com";
      //      創建請求隊列
              RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
      //      創建請求,添加請求類型
              JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET,src,null, new com.android.volley.Response.Listener<JSONObject>() {
                  @Override
                  public void onResponse(JSONObject response) {//成功時返回的response數據
                      String s = response.toString();
                      System.out.println(s);
                  }
              }, new Response.ErrorListener() {
                  @Override
                  public void onErrorResponse(VolleyError error) {//失敗時返回的error信息
                      String message = error.getMessage();
                      System.out.println(message);
                  }
              });
      //      將請求添加至隊列中,否則不會發起請求
              requestQueue.add(request);
      

      Post

      //      請求地址
              String src = "https://www.baidu.com";
      //      創建請求隊列
              RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
      //      創建參數
              JSONObject data = new JSONObject();
              try {
                  data.put("username","123");
                  data.put("password","123");
              } catch (JSONException e) {
                  e.printStackTrace();
              }
      //      創建請求,添加請求類型
      
      //      順序是 請求方法 請求地址 請求攜帶的數據 監聽器
              JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST,src,data, new com.android.volley.Response.Listener<JSONObject>() {
                  @Override
                  public void onResponse(JSONObject response) {//成功時返回的response數據
                      String s = response.toString();
                      System.out.println(s);
                  }
              }, new Response.ErrorListener() {
                  @Override
                  public void onErrorResponse(VolleyError error) {//失敗時返回的error信息
                      String message = error.getMessage();
                      System.out.println(message);
                  }
              });
      //      將請求添加至隊列中,否則不會發起請求
              requestQueue.add(request);
      

      Put

      在post基礎上修改請求方法即可

      delete

      判斷是否攜帶參數并且post或get中修改即可

      網絡圖片加載框架

      1、通過ImageRequest請求網絡圖片

      這種方法是通過ImageRequest來請求一張圖片轉換為Bitmap格式,在返回的Bitmap中對ImageView進行設置圖片,較為簡單。

              img = (ImageView) findViewById(R.id.img);
      //        創建鏈接
              String url = "圖片鏈接";
      //      創建隊列
              RequestQueue requestQueue = Volley.newRequestQueue(this);
      //        創建圖片請求
              ImageRequest imageRequest = new ImageRequest(url, new Response.Listener<Bitmap>() {
                  @Override
                  public void onResponse(Bitmap response) {
                      img.setImageBitmap(response);
                  }
              }, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
                  @Override
                  public void onErrorResponse(VolleyError error) {
      
                  }
              });
      //        添加進隊列
              requestQueue.add(imageRequest);
      

      2、通過Imageloader加載圖片

      這種方法對比起上一種來說要更加復雜一些,我們需要先新建一個類實現ImageLoader.ImageCache接口

      public class BitmapCache implements ImageLoader.ImageCache{
              private LruCache<String, Bitmap> mCache;
      
              public BitmapCache() {
                  //設置圖片最大值
                  int maxSize = 10*1024;
                  mCache = new LruCache<String, Bitmap>(maxSize){
                      @Override
                      protected int sizeOf(String key, Bitmap value) {
                          return value.getRowBytes()*value.getHeight();
                      }
                  };
              }
      
              @Override
              public Bitmap getBitmap(String url) {
                  return mCache.get(url);
              }
      
              @Override
              public void putBitmap(String url, Bitmap bitmap) {
                  mCache.put(url,bitmap);
              }
          }
      

      然后再去MainActivity中去創建ImageLoader,它不需要我們去設置圖片,只需要將圖片作為一個參數傳遞進去,它會幫我們自動加載進ImageView中。

              img = (ImageView) findViewById(R.id.img);
      //        創建鏈接
              String url = "圖片鏈接";
      //      創建隊列
              RequestQueue requestQueue = Volley.newRequestQueue(this);
      //        創建圖片請求
              ImageLoader imageLoader = new ImageLoader(requestQueue, new BitmapCache());
      //        設置圖片加載監聽,設置默認圖片和加載錯誤圖片
              ImageLoader.ImageListener imageListener = imageLoader.getImageListener(img,R.drawable.edittext_bg,R.drawable.ic_home_black_24dp);
      //        發起請求
              imageLoader.get(url,imageListener);
      

      3、通過NetworkImageView加載圖片

      除了使用ImageView加載圖片,Volley還提供了一個組件就是NetworkImageView,我們在布局文件上使用它。

         <com.android.volley.toolbox.NetworkImageView
              android:id="@+id/img"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
          </com.android.volley.toolbox.NetworkImageView>
      

      它同樣需要前面的BitmapCache類,因為他也需要ImageLoder。

              img = (NetworkImageView) findViewById(R.id.img);
      //        創建鏈接
              String url = "圖片地址";
      //      創建隊列
              RequestQueue requestQueue = Volley.newRequestQueue(this);
      //      創建一個ImageLoader
              ImageLoader imageLoader = new ImageLoader(requestQueue, new BitmapCache());
      
              // 默認圖片和異常圖片設置
              img.setDefaultImageResId(R.drawable.ic_home_black_24dp);
              img.setErrorImageResId(R.drawable.ic_home_black_24dp);
      //        加載圖片
              img.setImageUrl(url,imageLoader);
      

      總結

      不管你使用的是Volley框架是單純的請求數據還是加載圖片都要記住,它不適合體量較大的網絡請求。

      以上三種加載網絡圖片的方式最終都能得到成果圖

      posted @ 2022-11-23 15:46  高同學,你好  閱讀(711)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 性欧美三级在线观看| 久久99精品久久久久久| 精品无码久久久久久尤物| 18禁动漫一区二区三区| 麻花传媒在线观看免费| 亚洲综合精品第一页| 无码av永久免费专区麻豆| 亚洲欧美在线观看一区二区| 国产偷窥熟女高潮精品视频| 亚洲少妇人妻无码视频| 国产高清自产拍AV在线| 男女性杂交内射女bbwxz| 青青草原国产精品啪啪视频| 国产精品视频一区不卡| 精品久久久久久亚洲综合网 | 欧美亚洲综合久久偷偷人人| 在线看无码的免费网站| 亚洲熟妇av一区二区三区宅男| 精品一卡2卡三卡4卡乱码精品视频 | 四虎在线播放亚洲成人| 国产一级小视频| 又大又粗欧美成人网站| 久久人人爽人人爽人人av| 一本大道久久香蕉成人网| 九九久久精品国产免费看小说| 亚洲中文字幕人妻系列| 中文字幕乱码中文乱码毛片| 亚洲国产成人一区二区在线 | 男人一天堂精品国产乱码| 人妻精品中文字幕av| 无码尹人久久相蕉无码| 日韩人妻无码一区二区三区俄罗斯 | 深泽县| 四虎影院176| 国产黄色三级三级看三级| 亚洲av无码专区在线亚| 免费费很色大片欧一二区| 国产女主播喷水视频在线观看| 被黑人巨大一区二区三区| 成人做受120秒试看试看视频| 欧美性受xxxx白人性爽|