Android Glide Error:You cannot start a load for a destroyed activity
Android Glide Error:You cannot start a load for a destroyed activity
我正在使用 glide 查看从我的 activity 数据库中获取的 url 图像,我正在删除 activity 中的图像,在删除下一个 [=19] 之后=] 将被打开,但第一次删除图像时没有任何错误,第二次如果打开并按删除我收到此错误:
java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity
这是我删除图片的代码:
alert.setNegativeButton("Delete", new DialogInterface.OnClickListener() {
@Override
public void onClick(final DialogInterface dialogInterface, final int i) {
try {
final Query postRef = ref.child("Pendingevents").orderByChild("Eventtitle").equalTo(Title);
postRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot child : dataSnapshot.getChildren()) {
child.getRef().removeValue();
Toast.makeText(getApplicationContext(), "Event Deleted", Toast.LENGTH_SHORT).show();
Intent intent=new Intent(getApplicationContext(),PendingEvents.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
@Override
public void onCancelled(DatabaseError firebaseError) {
}
});
}catch (Exception e)
{
Toast.makeText(ApproveEvents.this, "Unknown Error,please Try Again", Toast.LENGTH_SHORT).show();
}
}
});
AlertDialog build=alert.create();
build.show();
}
});
Logcat:
java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity
at com.a.a.e.o.b(Unknown Source)
at com.a.a.e.o.a(Unknown Source)
at com.a.a.f.a(Unknown Source)
at bootcamplearning.humanplanet.u.a(Unknown Source)
at com.google.android.gms.b.ol.a(Unknown Source)
at com.google.android.gms.b.qh.b(Unknown Source)
at com.google.android.gms.b.qn.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5294)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
更新
最好不要使用 post 底部描述的方法。
主要思想是 Glide 关注它工作的元素的生命周期。如果 Fragment
或 Activity
将被销毁,Glide 将完成其图像处理工作。 Here is a detailed discussion of the issue.
总而言之,在调用 load
从某些 AsyncTask
或其他线程返回之前,您应该检查您的 activity 是否还活着:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && someActivity.isDestroyed()) {
return;
} else {
Glide.with(someActivity)
.load(imageUrl)
....;
}
解决方法,不推荐,因为如果Activity
被销毁会导致一些不必要的处理。但它易于使用并发挥作用。
在 Glide.with(context)
中尝试传递应用程序上下文而不是 Activity。在这种情况下,你不应该依赖于 Activity 生命周期。
例如,在 activity 中,您可以使用:
Glide.with(getApplicationContext())
.load(imageUrl)
.into(yourImageView);
或者在 framgent 中:
Glide.with(getActivity().getApplicationContext())
.load(imageUrl)
.into(yourImageView);
在片段中,使用:
if(getActivity !=null) {
Glide.with(getActivity())
.load(imageUrl)
.into(yourImageView);
}
我正在使用 glide 查看从我的 activity 数据库中获取的 url 图像,我正在删除 activity 中的图像,在删除下一个 [=19] 之后=] 将被打开,但第一次删除图像时没有任何错误,第二次如果打开并按删除我收到此错误:
java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity
这是我删除图片的代码:
alert.setNegativeButton("Delete", new DialogInterface.OnClickListener() {
@Override
public void onClick(final DialogInterface dialogInterface, final int i) {
try {
final Query postRef = ref.child("Pendingevents").orderByChild("Eventtitle").equalTo(Title);
postRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot child : dataSnapshot.getChildren()) {
child.getRef().removeValue();
Toast.makeText(getApplicationContext(), "Event Deleted", Toast.LENGTH_SHORT).show();
Intent intent=new Intent(getApplicationContext(),PendingEvents.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
@Override
public void onCancelled(DatabaseError firebaseError) {
}
});
}catch (Exception e)
{
Toast.makeText(ApproveEvents.this, "Unknown Error,please Try Again", Toast.LENGTH_SHORT).show();
}
}
});
AlertDialog build=alert.create();
build.show();
}
});
Logcat:
java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity
at com.a.a.e.o.b(Unknown Source)
at com.a.a.e.o.a(Unknown Source)
at com.a.a.f.a(Unknown Source)
at bootcamplearning.humanplanet.u.a(Unknown Source)
at com.google.android.gms.b.ol.a(Unknown Source)
at com.google.android.gms.b.qh.b(Unknown Source)
at com.google.android.gms.b.qn.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5294)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
更新
最好不要使用 post 底部描述的方法。
主要思想是 Glide 关注它工作的元素的生命周期。如果 Fragment
或 Activity
将被销毁,Glide 将完成其图像处理工作。 Here is a detailed discussion of the issue.
总而言之,在调用 load
从某些 AsyncTask
或其他线程返回之前,您应该检查您的 activity 是否还活着:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && someActivity.isDestroyed()) {
return;
} else {
Glide.with(someActivity)
.load(imageUrl)
....;
}
解决方法,不推荐,因为如果Activity
被销毁会导致一些不必要的处理。但它易于使用并发挥作用。
在 Glide.with(context)
中尝试传递应用程序上下文而不是 Activity。在这种情况下,你不应该依赖于 Activity 生命周期。
例如,在 activity 中,您可以使用:
Glide.with(getApplicationContext())
.load(imageUrl)
.into(yourImageView);
或者在 framgent 中:
Glide.with(getActivity().getApplicationContext())
.load(imageUrl)
.into(yourImageView);
在片段中,使用:
if(getActivity !=null) {
Glide.with(getActivity())
.load(imageUrl)
.into(yourImageView);
}