web-dev-qa-db-ja.com

glideを使用して、relativelayoutイメージで破壊されたアクティビティのロードを開始することはできません

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>
42
Stephen

使用:

Glide.with(getApplicationContext()).load(...)

代わりに:

Glide.with(TabMorePagesDetailActivity.this).load(...)

それがあなたの問題を解決することを願っています〜

96
Ferdous Ahamed

コンテキストが破棄されているか、手動でではないかを単純に確認できます。

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
}
9
DiRiNoiD

数日前に同じ問題が発生しましたが、現在のクラスコンテキストメモリの代わりにアプリケーションコンテキストメモリを渡すことでこれを解決しました。

役立つかもしれません:-

このコードを使用する

 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ライブラリの問題です。

5
Peter

Glideで画像を読み込む前にこれを試してください。私の場合、mireferはStorageReferenceで、miimagenはImageViewです。これでこの問題を解決しました。それがあなたのお役に立てば幸いです。

if (!this.isFinishing ()) {
                // Load the image using Glide
                Glide.with(YourActivity.this)
                        .using(new FirebaseImageLoader())
                        .load(mirefer)
                        .into(miimagen);
            }
1
Liliana J

正しいライフサイクルを持つパラメーターを使用してGlideをセットアップします。たとえば、カスタムビューでGlide.with(this)の代わりにGlide.with(getContext())を使用します。

1
Cristan