2016-10-30 9 views
1

私は自分のアクティビティのデータベースからURLとして取得しているイメージを表示するためにグライドを使用しています。次のアクティビティを削除した後、しかしに開放し、プレスが、私はこのエラーを取得しています削除した場合、画像がエラーなしで削除されて初めて、二回目:Android Glide Error:破壊されたアクティビティのロードを開始できません

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) 
+1

あなたのコードを表示してくださいを[MCVE] –

+0

あなたにも完全なlogcatを追加してもらえますようそれがエラーの原因だと思うなら、Glideのコードのセクションを参照してください。 –

+0

ロードが完了する前に破棄された(たとえば、デバイスの回転など)1つのアクティビティからイメージのロードを開始してもよろしいですか? –

答えて

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)アクティビティの代わりにアプリケーションコンテキストを渡そうとします。この場合、アクティビティのライフサイクルに依存しないでください。

例えば、活動には、これを使用することができます

Glide.with(getApplicationContext()) 
     .load(imageUrl) 
     .into(yourImageView); 

またはframgentに:

Glide.with(getActivity().getApplicationContext()) 
     .load(imageUrl) 
     .into(yourImageView); 
関連する問題