Android Glide错误:您无法为已销毁的活动启动加载

时间:2016-10-30 06:28:37

标签: android android-glide

我正在使用滑动来查看在我的活动中从数据库获取的图像,我正在删除活动中的图像,其中删除下一个活动后将会打开,但第一次删除图像没有任何错误,第二次如果打开并按删除我收到此错误:

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)

2 个答案:

答案 0 :(得分:2)

<强>更新

最好不要使用帖子底部描述的方法。

主要思想是Glide关注其工作元素的生命周期。如果FragmentActivity将被销毁,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); }