【安卓】網絡架構

網絡架構測試

1. Volley架構

  1. 總體操作
    1)創建一個隊列,可以封裝爲單例Singleton(隊列較耗資源)
    2)創建請求,將其加入隊列,volley通過參數回調執行返回結果

implementation ‘com.android.volley:volley:1.1.1’

  1. 樣例測試
    1)設置佈局textView在設置scrollview滾動條佈局中,保證放得下
    2)新建請求選擇StringRequest方法,兩個構造函數,其中的一個四/三參數的可以指定請求
    a. 請求方式,獲取或上傳(三參數不設置這次)
    b. 請求網站
    c. 成功回調
    d. 錯誤回調,這兩個回調簡寫就是類lambda表達式,如果用Kotlin寫,第一個參數不能指定,找不到Method (暫時原因不明)

  2. 測試結果,注意Volley傳送門裏作者寫的,添加網絡請求權限,這個不屬於危險權限之一在這裏插入圖片描述
    在這裏插入圖片描述

  3. 修改獲取網上圖片(Volley圖片加載)
    1)改寫第二步的請求,使用ImageLoader,第一個參數是請求隊列(暫時用不到,第二個建立個緩存,內部方法有get和put方法(如果本地有了就拿緩存,具體不處理也能達到一點效果)
    2)該對象設置了請求隊列,使用get方法傳入url和監聽對象,並且直接內部成功/失敗回調,setImageBitmap代碼中設定圖片

      ImageLoader imageLoader=new ImageLoader(mQueue, new ImageLoader.ImageCache() {
            //建立緩存 設置最大緩存量
            private LruCache<String,Bitmap> cache=new LruCache<>(50);
            @Override
            public Bitmap getBitmap(String url) {
                return cache.get(url);
            }

            @Override
            public void putBitmap(String url, Bitmap bitmap) {
                cache.put(url,bitmap);
            }
        });
        imageLoader.get(url, new ImageLoader.ImageListener() {
            @Override
            public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
                imageView.setImageBitmap(response.getBitmap());
            }

            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });

在這裏插入圖片描述
ps:改爲Volley自帶的NetworkImageview控件,不用監聽的話也可以這樣寫
在這裏插入圖片描述

2.Glide組件

非網絡架構,但真的很好用,就放同級了

implementation ‘com.github.bumptech.glide:glide:4.11.0’
annotationProcessor ‘com.github.bumptech.glide:compiler:4.11.0’

  1. 在原第二步基礎上改下,就能達到同樣效果,這豈不是美滋滋,並且智能緩存,還有更多個性化的操作
 Glide.with(this)
             .load(url)
             .placeholder(R.drawable.ic_launcher_background)//佔位符
             .listener(new RequestListener<Drawable>() {
                 @Override
                 public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                     return false;
                 }

                 @Override
                 public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                     return false;
                 }
             })
                .into(imageView);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章