2

2 つのアクティビティがあります。最初のアクティビティでは、文字列「pathName」を 2 番目のアクティビティに渡します。私は追加の OK を受け取っており、このパス名からファイルを作成できます。そのファイルから .listFiles() を呼び出そうとすると問題が発生します。

コード: 最初のアクティビティ

    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

            String pathToSend = albumDirectory+albumList.get(position);
            Intent i = new Intent(getBaseContext(),GalleryImageSlider.class);
            i.putExtra("pathName", pathToSend);
            startActivity(i);
        }

2 番目のアクティビティ:

    List<File> imageList;

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_capture_gallery);

    Intent i = getIntent();
    filePath = i.getExtras().getString("pathName");
    albumFile = new File(filePath);

    Log.d("Fragment","File Path: " + albumFile.getAbsolutePath());
            //I can see this directory on my tablet, and I can see the files within. So the file
            path is correct

    try{
        imageList = Arrays.asList(albumFile.listFiles());

    }
    catch(NullPointerException e){
        Log.e("Error", "NPE: " + e);
    }

読み取るファイルがない場合、 .listFiles が null を返すことを理解しています。しかし、ファイルはあります。タブレットのファイル マネージャーを見ると、それらを見ることができます。

誰でもこれを解決する方法を見ますか? 事前に感謝します。

4

3 に答える 3

2

おそらく問題は、パスがディレクトリではないか、パスを読み取る権限がないためです。call の前に確認する必要があるメソッドのヒントを次に示しますlistFiles()

  1. file.canRead()- ファイルが読み取り可能かどうかを示す bool を返します。
  2. file.isDirectory()- ファイルがディレクトリかどうかを示す bool を返します。

パスが正しいと言ったので、おそらく 2 番目のオプションは解決策ではありませんが、最初のオプションは可能です。

于 2013-08-09T06:15:01.403 に答える
0

これを行うための PERMISSON が欠落している可能性があります。null をlistFiles()返す場合は、ディレクトリが見つからない場合や、そのディレクトリにアクセスする権限がない場合があります。AndroidManifest.xml で PERMISSION を確認してください。READ_EXTERNAL_STORAGEパーミッションにを追加しましたか? お役に立てれば。

于 2013-08-09T05:48:54.780 に答える