2011-12-09 63 views
18

この関数を呼び出すと、画像ビューに画像がありません bitmapFactory.decodefile(filename) nullを示す...これを助けてください。ここでBitmapFactory.decodeFile(ファイル名)からビットマップがnullを返しています

が私のコードです:

public Bitmap ShowImage(String imageName,String userImageName) 
{ 

    File sdcard_mainDirectory = new File(Environment.getExternalStorageDirectory(),"UserImages").getAbsoluteFile(); 

    File file = new File(sdcard_mainDirectory, userImageName).getAbsoluteFile(); 

    if (file != null) { 

     try { 

      String imageInSD = "/sdcard/UserImages/"+userImageName; 

      Bitmap bitmap = BitmapFactory.decodeFile(imageInSD); 

      return bitmap; 

     } 
     catch (Exception e) { 

      e.printStackTrace(); 
     } 

    } 

    return null; 

} 
+0

stackTraceを転記してください。 – st0le

答えて

26

私は、あなたが取得する場合の.pngファイルはその後、ちょうど、

Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); 

NOTE存在だと思いますこんにちはnullですが、画像サイズが大きくて例外が発生する可能性がありますので、ログを確認して、outofmemoryビットマップのエラーがある場合は、そのオプションを使用してください:

BitmapFactory.Options options; 

try { 
    String imageInSD = "/sdcard/UserImages/" + userImageName; 
    Bitmap bitmap = BitmapFactory.decodeFile(imageInSD); 
    return bitmap; 
} catch (OutOfMemoryError e) { 
    try { 
    options = new BitmapFactory.Options(); 
    options.inSampleSize = 2; 
    Bitmap bitmap = BitmapFactory.decodeFile(imageInSD, null, options); 
    return bitmap; 
    } catch(Exception e) { 
    Log.e(e); 
    } 
} 
4

それは簡単です:あなたのファイルは、Androidのビットマップの実装によってサポートされていない画像やイメージではないか、あなたのパスが無効です。 BitmapFactory.decodeFile(String file)ため


参照ドキュメント:

戻り
結果のデコードビットマップ、またはnullそれは、復号化できなかった場合。ビットマップをデコードすることができないとき


通常、いくつかのログがlogcatに印刷されます。注意深く点検してください。

+0

"通常、ビットマップをデコードできない場合、いくつかのログがlogcatに出力されます。"このキーセンテンスは私のものです、ありがとう:) – oguzhan

9

なぜこのようにしていますか?文字列imageInSD = "/ sdcard/UserImages /" + userImageName;はまた..あなたは、Androidは、画像ファイルがその場所に存在しているサポートされていチェック

+1

外部ストレージからキャッシュされたイメージを読み込むとき、file.getAbsolutePath()はgetPath()が正しいのに私のためにそれを修正しました。 – scottyab

7

SDカードアクセス許可READ_EXTERNAL_STORAGEおよび/またはWRITE_EXTERNAL_STORAGEを追加してみます。 それは私のために働く。

5

はあなたのオプションで(BitmapFactory.Options)がに設定されているか、それ以外の場合はnullを返しますInJustDecodeBoundsことを確認してください。 これは、ファイルをデコードするだけで、コード内でそれをさらに必要としない場合にtrueに設定できます。この方法では、余分なメモリを割り当てる必要はありません。詳細については、hereを参照してください。

0

私はBitmapFactory.decodeFile()実行する正確なパスに置く画像全体の前に16

1

より大きいAPIレベルでの実行時間のパーミッションチェックがありませんでした。 decodeFile()が実行されると画像がありません。したがって、ビットマップはnullを返します。一般に、高画素画像は、それらの経路に配置するのにいくらか余分な時間を要する。したがって、この例外が発生します。

nullをチェックしてdecodeFileを試してください。

Bitmap bitmap = null; 

while(bitmap == null) 
    bitmap = BitmapFactory.decodeFile(imageInSD); 
関連する問題