问题描述:
在获得服务器接口的json之后,将一切信息都显示出来稳妥后,来搞比较特别的图片加载,服务器文件夹的所有静态图片存放在本地,想要在Android加载服务器静态图片,如下是使用的第一种方法,按道理是可以的,但是因为我想加载到listView中,这个是适配器中的文件,单独给每个列表中的图片资源进行加载,在传送过来的context中却无法使用线程更新控件,卡在这就很尴尬。但是在正常的Activity中这种写法是可以的。
private void InternetSever(String url, ImageView imageView1) {
OkHttpClient client = new OkHttpClient();
final Request request = new Request.Builder()
.url(url)
.get()
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
System.out.println(e);
Looper.prepare();
Toast.makeText(context, "网络异常,请稍后再试!", Toast.LENGTH_SHORT).show();
Looper.loop();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final byte[] data = response.body().bytes();
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
//通过imageview,设置图片
imageView1.setImageBitmap(bitmap);
}
});
}
解决方案:
使用了第三方库
// 加载网络图片
implementation 'com.github.bumptech.glide:glide:3.7.0'
implementation 'com.android.support:appcompat-v7:24.2.1'
使用方法也是非常的无脑:
ImageView imageView1 = view1.findViewById(R.id.image1);
String url = URL + "/media/" + list.get(position).getNews_avatars();
// InternetSever(url, imageView1);
Glide.with(context) //主要这一句
.load(url)
.into(imageView1);