我正在使用滑动来查看在我的活动中从数据库获取的图像,我正在删除活动中的图像,其中删除下一个活动后将会打开,但第一次删除图像没有任何错误,第二次如果打开并按删除我收到此错误:
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)
答案 0 :(得分:2)
<强>更新强>
最好不要使用帖子底部描述的方法。
主要思想是Glide关注其工作元素的生命周期。如果Fragment
或Activity
将被销毁,Glide将完成其图像处理工作。 Here is a detailed discussion of the issue
总而言之,在从某些load
或其他线程调用AsyncTask
之前,您应检查您的活动是否处于活动状态:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && someActivity.isDestroyed()) {
return;
} else {
Glide.with(someActivity)
.load(imageUrl)
....;
}
解决方法,不推荐使用,因为如果Activity
被销毁,将会导致一些不必要的处理。但它易于使用并且可以正常工作。
在Glide.with(context)
尝试传递Application上下文而不是Activity。在这种情况下,您不应该依赖于Activity生命周期。
例如,在活动中你可以使用它:
Glide.with(getApplicationContext())
.load(imageUrl)
.into(yourImageView);
或者在framgent中:
Glide.with(getActivity().getApplicationContext())
.load(imageUrl)
.into(yourImageView);
答案 1 :(得分:0)
在片段中使用。
if(getActivity!=null){ Glide.with(getActivity()) .load(imageUrl) .into(yourImageView); }