2017-11-15 17 views
1

私はソーシャルメディアプラットフォームを作成しています。このプラットフォームでは、既にデバイス上にある写真をプラットフォームにアップロードできます。 githubのサンプルは、(理論的に)私がjpg/pngファイルをすべて読んで、recyclerviewでそれらを表示できるようにすべきであることを発見しました。ファイルを取得するコードを以下に示します。File.mkdirs()がfalseを返す

private void createImageGallery() { 
     File storageDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 
     mGalleryFolder = new File(storageDirectory, GALLERY_LOCATION); 
     Log.i("gallery", "" + (mGalleryFolder != null)); 
     Log.i("gallery", mGalleryFolder.toString()); 
     if (!mGalleryFolder.exists()) { 
      boolean mk = mGalleryFolder.mkdirs(); 
      Log.i("gallery", "mkdirs returns " + mk); 
     } 
    } 

最初のログ文がtrueに相当、第二は、文字列

"/storage/emulated/0/Pictures/hilarity_image"

を示した第三のログステートメントは、ブールMKが偽であると言います。 FileオブジェクトmGalleryFolderは、recyclerviewアダプタのコンストラクタに渡されます。 adapter.getItemCount()が呼び出されると、エラーがスローされます。コードは

public int getItemCount() { 
     return mGalleryFolder.listFiles().length; 
    } 

マニフェストからの権限の一部の下に示されているが、ヌルオブジェクトに対して呼び出されている明らか

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 

、.LENGTH()の下に示されています。私はこれがmkdirs()がfalseを返すことと関係があると仮定しました。この仮定は正しいですか?どうすればmkdirs()がtrueを返すようにするのですか?この問題に対する私のアプローチが間違っている場合は、私が修正してください、リサイクルビューで既にデバイス上にあるすべての写真が表示されます。

+1

書き込み権限がありますか? https://developer.android.com/training/permissions/requesting.html – diegoveloper

答えて

1

ディレクトリが作成されていません。だからあなたはコードを続けるべきではありません。

これで、存在しないディレクトリにファイルをリストアしようとしました。 listFilesがnullを返すのは不思議ではありません。

Android 6+では、マニフェストでリクエストした権限を確認するコードを追加する必要があります。

実行時のアクセス許可。

コードを追加すると、そのディレクトリを作成できます。

+0

ありがとうございます。これからもこれを心に留めておきます。 –

関連する問題