如果图像未从 url 加载,则单击 imageView 会崩溃
Click on imageView crashes if image not loaded from url
我正在使用无尽的回收站视图来显示多个帖子。但是如果我的网速很慢并且当我点击 imageview 时图像没有按时加载,它会使应用程序崩溃。
我正在通过意图将 url 从 activity 发送到另一个。
这是代码
RecyclerAdapter.java
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String icon = jsonData.get((position)).getImg();
Intent intent = new Intent(context, Detail.class);
intent.putExtra("app_icon", icon);
}
context.startActivity(intent);
Detail.java
detail_icon = (ImageView) findViewById(R.id.detail_icon);
String appicon = getIntent().getStringExtra("app_icon");
try {
detail_icon.setImageBitmap(BitmapFactory.decodeStream((InputStream) new URL(appicon).getContent()));
}catch (IOException e2) {
e2.printStackTrace();
}
在未加载图像时在此行崩溃,我单击图像视图。
detail_icon.setImageBitmap(BitmapFactory.decodeStream((InputStream) new URL(appicon).getContent()));
Logcat
Process: com.example.lenovo.connectiontest, PID: 26525
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.lenovo.connectiontest/com.example.lenovo.connectiontest.Activity.Detail}: android.os.NetworkOnMainThreadException
at com.example.lenovo.connectiontest.Activity.Detail.onCreate(Detail.java:233)
是的,它解决了我的问题
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
} catch (Exception e) {
e.printStackTrace();
}
}
});
thread.start();
你为什么不使用 Glide?
将此添加到您的应用级别 Gradle 文件:
// Glide image library
compile 'com.github.bumptech.glide:glide:3.7.0'
然后在任何 activity 中使用它提供的 URL,图像被缓存并且不需要再次下载(在我的情况下!)
然后将其添加到您的 Activity:
Glide.with(this).load(urlProfileImg)
.crossFade()
.thumbnail(0.5f)
.bitmapTransform(new CircleTransform(this))
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imgProfile);
或者尝试使用 Picasso - 它有一个超类,您可以在加载图像时覆盖它:
Picasso.with(context).load(url).into(target, new Callback(){ @Override public void onSuccess() { } @Override public void onError() { } });
抱歉代码格式错误!
希望对您有所帮助!
我正在使用无尽的回收站视图来显示多个帖子。但是如果我的网速很慢并且当我点击 imageview 时图像没有按时加载,它会使应用程序崩溃。 我正在通过意图将 url 从 activity 发送到另一个。
这是代码
RecyclerAdapter.java
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String icon = jsonData.get((position)).getImg();
Intent intent = new Intent(context, Detail.class);
intent.putExtra("app_icon", icon);
}
context.startActivity(intent);
Detail.java
detail_icon = (ImageView) findViewById(R.id.detail_icon);
String appicon = getIntent().getStringExtra("app_icon");
try {
detail_icon.setImageBitmap(BitmapFactory.decodeStream((InputStream) new URL(appicon).getContent()));
}catch (IOException e2) {
e2.printStackTrace();
}
在未加载图像时在此行崩溃,我单击图像视图。
detail_icon.setImageBitmap(BitmapFactory.decodeStream((InputStream) new URL(appicon).getContent()));
Logcat
Process: com.example.lenovo.connectiontest, PID: 26525
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.lenovo.connectiontest/com.example.lenovo.connectiontest.Activity.Detail}: android.os.NetworkOnMainThreadException
at com.example.lenovo.connectiontest.Activity.Detail.onCreate(Detail.java:233)
是的,它解决了我的问题
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
//Your code goes here
} catch (Exception e) {
e.printStackTrace();
}
}
});
thread.start();
你为什么不使用 Glide? 将此添加到您的应用级别 Gradle 文件:
// Glide image library
compile 'com.github.bumptech.glide:glide:3.7.0'
然后在任何 activity 中使用它提供的 URL,图像被缓存并且不需要再次下载(在我的情况下!) 然后将其添加到您的 Activity:
Glide.with(this).load(urlProfileImg)
.crossFade()
.thumbnail(0.5f)
.bitmapTransform(new CircleTransform(this))
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imgProfile);
或者尝试使用 Picasso - 它有一个超类,您可以在加载图像时覆盖它:
Picasso.with(context).load(url).into(target, new Callback(){ @Override public void onSuccess() { } @Override public void onError() { } });
抱歉代码格式错误! 希望对您有所帮助!