2016-11-30 1 views
1

私のSDカードから画像のパスのURLを読み取る際に問題があります。それは、常にこのエラーを返すカメラのディレクトリのヌル

:nullの配列の長さを取得しようとしています。

は自分の携帯電話に画像を閲覧ヌル配列の長さを取得しようと、私はカメラロールディレクトリとしてこのディレクトリを取得:

/storage/emulated/0/DCIM/Camera/imageName 

私は私のマニフェストファイルのパーミッションに入れる:

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

これは私のコードです:

public void processImages() { 
    listOfImages = new ArrayList<>(); 

    Boolean isSDPresent = android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED); 

    if (isSDPresent) { 


//returns same path - /storage/emulated/0/DCIM/Camera/ 
     String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath()+"/Camera/"; 
     File f = new File(path); 

     listOfImages = scanPhotos(f); 

    } else { 
     Toast.makeText(this, "sd not present", Toast.LENGTH_SHORT).show(); 
    } 
} 

public List<File> scanPhotos(File directory) { 
    List<File> listOfPictures = new ArrayList<>(); 

//this returns null 
     File[] files = directory.listFiles(); 
     for (File file : files 
       ) { 
      if (file.isDirectory() && !file.isHidden()) { 
       listOfPictures.addAll(scanPhotos(file)); 
      } else { 
       if (file.getName().endsWith(".jpg") || file.getName().endsWith(".jpeg") || file.getName().endsWith(".png")) { 
        listOfPictures.add(file); 
       } 
      } 
     } 

    return listOfPictures; 
} 

答えとして私のコメントを投稿

f.canRead() - returns false 
+3

実行時のアクセス許可を確認しましたか? – Rahul

+0

これは私の問題を解決しました。私はそれらのマシュマロウの許可を完全に忘れていました。どうもありがとうございました – hyrulelink16

答えて

1

を行います。 からマシュマロ以降ランタイムpermissionsを提供する必要があります。

許可がユーザーによって付与されたかされていない伝えるコールバック

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {} 

があります。

リクエストのパーミッションを追加するには、このtutorialを使用してください。