2016-10-20 7 views
0

イメージ名のループ内にほぼ4000イメージを表示しています。画像名はリソースフォルダに見つからない場合はループ内に多数のイメージをロードする際にResources.NotFoundExceptionがスローされます

  1. 私のアプリは がスローされます。ここでは

    は私が

     for(int i=0; i<count(images_array); i++) { 
          mDrawableName = images_array(i); 
    
          int resID = res.getIdentifier(mDrawableName, "drawable", activity.getPackageName()); 
          Drawable drawable = res.getDrawable(resID); 
          image.setImageDrawable(drawable); 
        } 
    

    描画可能なフォルダから自分の画像を取得するために使用しています問題があるコードです私は例外とクラッシュします。

  2. listviewにdrawableから4000個のイメージを読み込む方がいいですか?イメージがドロウアブルでないかどうか確認する方法はありますか? プレースホルダイメージを表示しますか?わたしを通して
+0

ここには問題はありません...リソースが存在しないため例外が発生します。この場合、例外をキャッチして、必要な処理を行います。より良い方法... 4000画像を読み込まない? 10ピクセルを使わない限り、一度にすべてを表示することはできませんので、必要なものだけをロードしてください。 – AxelH

答えて

1

画像名はリソースフォルダに私のアプリを見つけていない 例外とクラッシュ。

getIdentifier存在しないリソースのための0を返し、その後getDrawableは(有効なIDはありません)id = 0ためResources.NotFoundExceptionをスローすることを予想される動作ですので、これは問題ではありません。

画像がドロワブルであるかどうかを確認する方法はありますか? プレースホルダ画像を表示しますか?

for (int i=0; i<count(images_array); i++) { 
    mDrawableName = images_array(i); 

    int resID = res.getIdentifier(mDrawableName, "drawable", activity.getPackageName()); 
    Drawable drawable; 
    if (resID == 0) { 
     drawable = res.getDrawable(R.drawable.placeholderimage, null); 
    } else { 
     drawable = res.getDrawable(resID); 
    } 
    image.setImageDrawable(drawable); 
} 

:あなたはその例外をキャッチしたりgetIdentifierが0
を返された場合、私はあなたのコードの残りの部分を知っていない確認し、あなたが投稿内容に基づいて、あなたがこれを行うことができますいずれか

注:
getDrawable(int id)は、API 22を使用して非推奨になりました。
サンプルコードでは、代わりにgetDrawable(int id, Resources.Theme theme)を使用しました。
alternativesをチェックアウトするとよいでしょう。

リストビューのdrawableから4000イメージを読み込む方法はありますか?

GlideなどのAndroidのRecyclerViewやサードパーティのライブラリを使用してみてください。

+0

代わりに、オブジェクト自体をチェックするためにResource.NotFoundExceptionを処理する方が良いです。私は自分の疑問に答えるだけです。 –

+1

IDを確認することをお勧めします。これはあまりにも多くの例外が時間を要します。特に(4000回の試行) – AxelH

0
Boolean fileFound = true; 
     try{ 
      int resID = res.getIdentifier(mDrawableName , "drawable", activity.getPackageName()); 
      Drawable drawable = res.getDrawable(resID); 
      image.setImageDrawable(drawable); 
     }catch (Resources.NotFoundException e){ 
       fileFound = false; 
     } 
     if(!fileFound){ 
      int resID = res.getIdentifier("img_not_found" , "drawable", activity.getPackageName()); 
      Drawable drawable = res.getDrawable(resID); 
      image.setImageDrawable(drawable); 
     } 
+0

@ginomempinの完全な答えに何が問題なのですか? 'あなたはその例外を捕まえるか、getIdentifierが0を返すかどうかをチェックするかのいずれかです。ところで、例外は重いプロセスです。だから、この方法はプロセスを劇的に遅らせるでしょう – AxelH

+0

私はちょうど私自身の質問に答えます。 このコードは私の魅力のように機能します。 –

+1

しかし、誰かがそれをして、もっと説明したら、なぜあなたは自分自身に答えましたか?以下のユーザーの場合、これは説明がある方が良いです...これは明らかにあなたがしたことであるので、彼の答えを受け入れてください。 – AxelH

関連する問題