0

我有一個問題Glide。這個問題發生在這樣:滑翔 - 應用程序崩潰與上下文錯誤在另一個活動

我去我的個人資料頁,然後我點擊返回按鈕,然後我在火力地堡數據庫(現在的應用程序崩潰)插入的對象。這個問題在我的UserProfile活動,但我不知道如何解決這個問題。我讀過兩篇類似的文章,但我不太明白。 (Glide error after activity was destroyed and restartedGlide image loading with application context

logcat是這樣的:

java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity 
                      at com.bumptech.glide.manager.RequestManagerRetriever.assertNotDestroyed(RequestManagerRetriever.java:134) 
                      at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:102) 
                      at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:87) 
                      at com.bumptech.glide.Glide.with(Glide.java:629) 
                      at gamingproject.sellmybooks.UserProfile.getUserData(UserProfile.java:114) 
                      at gamingproject.sellmybooks.UserProfile.access$000(UserProfile.java:39) 
                      at gamingproject.sellmybooks.UserProfile$1.onDataChange(UserProfile.java:75) 
                      at com.google.android.gms.internal.zzaie.zza(Unknown Source) 
                      at com.google.android.gms.internal.zzaje.zzcta(Unknown Source) 
                      at com.google.android.gms.internal.zzajh$1.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:5608) 
                      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:1397) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1192) 

檔案類:

public class UserProfile extends AppCompatActivity { 

Context mContext; 
ImageView userProfileImage; 
TextView name, mail, user_location_textView; 
String tag_login; 
String user_name, user_mail, user_token, user_urlPicture, user_location, user_key; 
String TAG_LOGIN = "TAG_LOGIN"; 
String KEY = "KEY"; 
int REQUEST_IMAGE_CAPTURE; 
DatabaseReference users; 

@TargetApi(Build.VERSION_CODES.KITKAT) 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(layout.activity_user_profile); 
    getSupportActionBar().hide(); 

    mContext = this; 

    userProfileImage = (ImageView) findViewById(R.id.imageProfile); 
    name = (TextView) findViewById(R.id.name); 
    mail = (TextView) findViewById(R.id.mail); 
    user_location_textView = (TextView) findViewById(R.id.user_location); 

    Intent intent = getIntent(); 
    tag_login = intent.getStringExtra(TAG_LOGIN); 
    user_key = intent.getStringExtra(KEY); 

    users = FirebaseDatabase.getInstance().getReference("Users").child("User" + tag_login).child(user_key); 

    users.addValueEventListener(new ValueEventListener() { 
     @RequiresApi(api = Build.VERSION_CODES.KITKAT) 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      getUserData(dataSnapshot); 
     } 
     @Override 
     public void onCancelled(DatabaseError databaseError) { 
     } 
    }); 

} 


///Get user's data with the key/// 

@TargetApi(Build.VERSION_CODES.KITKAT) 
@RequiresApi(api = Build.VERSION_CODES.KITKAT) 
private void getUserData(DataSnapshot dataSnapshot){ 
    if (Objects.equals(tag_login, "App")){ 
     UserApp userApp = dataSnapshot.getValue(UserApp.class); 
     user_name = userApp.user_name; 
     user_mail = userApp.user_mail; 
     user_token = userApp.user_token; 
     user_location = userApp.user_location; 
     user_urlPicture = userApp.user_bitmapImage; 
     name.setText(user_name); 
     mail.setText(user_mail); 
     user_location_textView.setText(user_location); 
     if (Objects.equals(user_urlPicture, "NoImage")){ 
      userProfileImage.setImageResource(drawable.noimage); 
      Toast.makeText(mContext, "Click on image to change it", Toast.LENGTH_LONG).show(); 
     } else { 
      Glide.with(mContext).load(user_urlPicture).into(userProfileImage); 
     } 
     userProfileImage.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
        REQUEST_IMAGE_CAPTURE = 1; 
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); 
       } 
       return false; 
      } 
     }); 


    } 

} 

感謝您的幫助

+0

請張貼出來的代碼。 –

+0

後您USERPROFILE –

+0

類我已經更新了我的問題 – Carlo

回答

2

您應該在活動期間刪除值變化監聽器的onDestroy。

事情是這樣的:

// during onCreate(Bundle) 
users.addValueEventListener(listener); 

// then during onDestroy() 
users.removeValueEventListener(listener); 

// outside any method you write the listener 
private ValueEventListener listener = new ValueEventListener() { 
     @RequiresApi(api = Build.VERSION_CODES.KITKAT) 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      getUserData(dataSnapshot); 
     } 
     @Override 
     public void onCancelled(DatabaseError databaseError) { 
     } 
    } 
+0

非常感謝@Budius – Carlo

1

最有可能當用戶已經從導航的活動了你的聽衆接到電話。當活動被破壞時,您需要刪除偵聽器。或者至少在設置文本之前檢查這些視圖是否爲空。

相關問題