Relativelayoutを使用して画像を設定しています。imageview手段を使用しなかったのは、relativelayout画像内でアイコンを設定しているためです。
私はglideの問題が何であるかを正確に知りません。以下にスタックトレースと関連コードを投稿しました。
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>
使用:
Glide.with(getApplicationContext()).load(...)
代わりに:
Glide.with(TabMorePagesDetailActivity.this).load(...)
それがあなたの問題を解決することを願っています〜
コンテキストが破棄されているか、手動でではないかを単純に確認できます。
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
}
}
}
}
これは、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
}
数日前に同じ問題が発生しましたが、現在のクラスコンテキストメモリの代わりにアプリケーションコンテキストメモリを渡すことでこれを解決しました。
役立つかもしれません:-
このコードを使用する
Glide.with(getApplicationContext())
.load(coverIMGurl)
.asBitmap()
.signature(new StringSignature(String.valueOf(System.currentTimeMillis())))
.into(new SimpleTarget<Bitmap>(500, 500) {....}
この問題が発生している場合でも、この記事を注意深くお読みください。「 https://github.com/bumptech/glide/issues/1097 "
この問題の概要:これはGlideライブラリの問題です。
Glideで画像を読み込む前にこれを試してください。私の場合、mireferはStorageReferenceで、miimagenはImageViewです。これでこの問題を解決しました。それがあなたのお役に立てば幸いです。
if (!this.isFinishing ()) {
// Load the image using Glide
Glide.with(YourActivity.this)
.using(new FirebaseImageLoader())
.load(mirefer)
.into(miimagen);
}
正しいライフサイクルを持つパラメーターを使用してGlideをセットアップします。たとえば、カスタムビューでGlide.with(this)
の代わりにGlide.with(getContext())
を使用します。