網絡架構測試
1. Volley架構
- 總體操作
1)創建一個隊列,可以封裝爲單例Singleton(隊列較耗資源)
2)創建請求,將其加入隊列,volley通過參數回調執行返回結果
implementation ‘com.android.volley:volley:1.1.1’
-
樣例測試
1)設置佈局textView在設置scrollview滾動條佈局中,保證放得下
2)新建請求選擇StringRequest方法,兩個構造函數,其中的一個四/三參數的可以指定請求
a. 請求方式,獲取或上傳(三參數不設置這次)
b. 請求網站
c. 成功回調
d. 錯誤回調,這兩個回調簡寫就是類lambda表達式,如果用Kotlin寫,第一個參數不能指定,找不到Method (暫時原因不明) -
測試結果,注意Volley傳送門裏作者寫的,添加網絡請求權限,這個不屬於危險權限之一
-
修改獲取網上圖片(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’
- 在原第二步基礎上改下,就能達到同樣效果,這豈不是美滋滋,並且智能緩存,還有更多個性化的操作
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);