J'utilise relativelayout pour définir une image.Pourquoi je n'avais pas utilisé imageview, cela signifie que, dans relativelayout image, je configure des icônes.
Je ne sais pas quel est le problème exactement dans glide.J'ai posté le stacktrace et le code pertinent ci-dessous:
Logcat:
FATAL EXCEPTION: main
Process: com.app.steve, PID: 15928
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.Glide.with(Glide.Java:644)
at com.app.steve.TabMorePagesDetailActivity$allPageDetails.onPostExecute(TabMorePagesDetailActivity.Java:1050)
at com.app.steve.TabMorePagesDetailActivity$allPageDetails.onPostExecute(TabMorePagesDetailActivity.Java:885)
at Android.os.AsyncTask.finish(AsyncTask.Java:632)
at Android.os.AsyncTask.access$600(AsyncTask.Java:177)
at Android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.Java:645)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:135)
at Android.app.ActivityThread.main(ActivityThread.Java:5221)
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:899)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:694)
TabMorePagesDetailActivity.Java:
RelativeLayout rlPageCoverImg;
rlPageCoverImg = (RelativeLayout)findViewById(R.id.rl_club_cover_img);
@Override
protected void onPostExecute(String response) {
super.onPostExecute(response);
dialog.dismiss();
............
String coverIMGurl = cover_avatar_obj.getString("url");
Log.e("ImgURL", coverIMGurl);
Glide.with(TabMorePagesDetailActivity.this).load(coverIMGurl).asBitmap().signature(new StringSignature(String.valueOf(System.currentTimeMillis())))
.into(new SimpleTarget<Bitmap>(500, 500) {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
Drawable drawable = new BitmapDrawable(getResources(), resource);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
rlPageCoverImg.setBackground(drawable);
}
}
});
}else {
rlPageCoverImg.setBackgroundResource(R.drawable.bg_golive);
}
@Override
protected void onDestroy()
{
super.onDestroy();
Glide.clear(rlPageCoverImg);
}
layout.xml:
<RelativeLayout
Android:id="@+id/rl_club_cover_img"
Android:layout_width="match_parent"
Android:layout_height="200dp"
Android:background="@drawable/cancel_image" >
// Inside this relativelayout image, I'm using buttons and icons
</RelativeLayout>
Vous pouvez simplement vérifier que le contexte est détruit ou non manuellement.
if (context == null) {
return
} else if (context !is Application) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
if (context is FragmentActivity) {
if ((context as FragmentActivity).isDestroyed) {
return
}
} else if (context is Activity) {
if ((context as Activity).isDestroyed) {
return
}
}
}
}
Ceci peut aussi être représenté comme une fonction d'extension Kotlin:
/**
* Return true if this [Context] is available.
* Availability is defined as the following:
* + [Context] is not null
* + [Context] is not destroyed (tested with [FragmentActivity.isDestroyed] or [Activity.isDestroyed])
*/
fun Context?.isAvailable(): Boolean {
if (this == null) {
return false
} else if (this !is Application) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
if (this is FragmentActivity) {
return !this.isDestroyed
} else if (this is Activity) {
return !this.isDestroyed
}
}
}
return true
}
J'ai le même problème avant quelques jours. J'ai résolu ce problème en passant le nom de la mémoire de contexte d'application de la mémoire de contexte en cours actuelle.
Peut-être que cela vous aidera: -
utilise ce code
Glide.with(getApplicationContext())
.load(coverIMGurl)
.asBitmap()
.signature(new StringSignature(String.valueOf(System.currentTimeMillis())))
.into(new SimpleTarget<Bitmap>(500, 500) {....}
Même si vous obtenez ce problème, lisez attentivement cet article " https://github.com/bumptech/glide/issues/1097 "
aperçu de ce problème: il s'agit d'un numéro de la bibliothèque Glide.
Essayez ceci avant de charger votre image avec Glide, dans mon cas, mirefer est un StorageReference, miimagen est un ImageView. J'ai résolu ce problème, avec ça. J'espère que cela pourrait vous aider.
if (!this.isFinishing ()) {
// Load the image using Glide
Glide.with(YourActivity.this)
.using(new FirebaseImageLoader())
.load(mirefer)
.into(miimagen);
}
Setup Glide avec un paramètre qui a le cycle de vie correct. Par exemple, utilisez Glide.with(this)
au lieu de Glide.with(getContext())
dans une vue personnalisée.