-1

私のアプリケーション写真へのAndroidアプリケーションディレクトリパスはすべてのバージョンで互換性が必要です。私は多くを検索しましたが、私はまだすべてのデバイスと互換性のあるものは見つかりませんでした。今度はこのコードを持っていますが、まだNullPointerExcepctionをpicturesDir.exists()U55ZTEのデバイスで与えています。すべてのバージョンとデバイスで互換性のあるAndroidアプリケーションディレクトリを作成してください

File picturesDir; 
    String state = Environment.getExternalStorageState(); 
    // Make sure it's available, if there is no SD card, create new directory objects to make 
    // directory on device. 
    if (!Environment.MEDIA_MOUNTED.equals(state)) { 
     picturesDir = new File(Environment.getDataDirectory() + "/data/" + getApplicationContext().getPackageName() + "/Pictures/"); 
    } else if (Environment.getExternalStorageState() != null) { 
     picturesDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); 
    } else{ 
     String externalStoragePath = Environment.getExternalStorageDirectory() 
       .getAbsolutePath(); 
     picturesDir = new File(externalStoragePath + getApplicationContext().getPackageName() + "/Pictures/"); 
    } 

    if (!picturesDir.exists()) { 
     picturesDir.mkdir(); 
    } 

enter image description here

我々は何をすべき?クラッシュを避けるためにnullであるかどうかを確認したくありません。私は写真を保存できる道が欲しい。ありがとう。

+0

"まだNullPointerExcepctionを与えています" - 質問を編集し、この例外に関連する完全なJavaスタックトレースを投稿してください。私は、あなたのアルゴリズムは、あなたの難しさの原因であると信じています。そして、スタックトレースはあなたの症状を確認するのに役立ちます。 – CommonsWare

+0

SDカードの状態を確認中に何らかのエラーを起こさなくても、いつでもSDカードが抽出されたりIOエラーが発生する可能性があります。とにかくIOエラーを捕まえなければなりません。すべてのコストでかなりコードを作成しようとしないでください、あなたはそれを行うことはできません。 – user1643723

+0

CommonsWare!をちょうど編集しました! –

答えて

1

getExternalFilesDir: "アプリケーション固有のディレクトリへの絶対パス。共有ストレージが現在利用できない場合はnullを返すことがあります"。したがって、getExternalFilesDirを使用する場合、ドキュメントによれば、にはがあり、nullを確認する必要があります。

マウントされていない以外にも外部ストレージが利用できないその他の理由があります。 getExternalStorageStateを呼び出してgetExternalFilesDirに電話をかける競争の可能性もあります。つまり、getExternalStorageState()を呼び出した直後にSDカードがマウントされている可能性がありますが、getExternalFilesDirを呼び出す前にSDカードがマウントされている可能性があります。この競合状態がクラッシュする可能性があります。

+0

ありがとうございます!私はそれをチェックし、もし何人かのユーザがまだそのエラーを出すなら、私はここに戻ってくるでしょう。ありがとう。 –

関連する問題