2015-08-25 5 views
0

Я пытаюсь создать приложение, и для этого мне нужно перечислить файлы. Я нашел полезный код и немного подгонял его для своих нужд. Это мой (простой) код:Android: NullPointer Exception (файлы)

// List all files from specific directory 
    public void listFiles(){ 

     // Path to directory to scane 
     String path = Environment.getExternalStorageDirectory().toString()+"/Download/"; 

     // New file-instance 
     File f = new File(path); 

     // Get the textview to display message 
     TextView textview = (TextView) findViewById(R.id.textView); 

     textview.setText(f.toString()); 

     // List the files 
     File file[] = f.listFiles(); 

     for(int i = 0; i < file.length; i++){ 
      Log.d("Files", "Filename: " + file[i].getName()); 
     } 
    } 

Я знаю, что это вызвано file.length в мой цикл, но я не понимаю, почему я получаю эту ошибку, так как она захватывает файлы в нужном каталоге и у меня есть файлы в этом каталоге ...

E

dit: This is my stack trace 

java.lang.NullPointerException: Attempt to get length of null array 
      at com.example.filemaker.MainActivity.listFiles(MainActivity.java:79) 
      at com.example.filemaker.MainActivity$1.onClick(MainActivity.java:31) 
      at android.view.View.performClick(View.java:4780) 
      at android.view.View$PerformClick.run(View.java:19866) 
      at android.os.Handler.handleCallback(Handler.java:739) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5257) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
+0

please post stack trace –

+0

См. «Если это абстрактное имя пути не обозначает каталог, то этот метод возвращает null» из [здесь] (http://docs.oracle.com/javase/7/docs/api/java /io/File.html#listFiles()). Может быть, переменная 'path' настроена неправильно? –

+0

Имеет ли ваше приложение разрешение READ_EXTERNAL_STORAGE? –

ответ

1

Так что линия сделать NPE? file.length? Это означает, что файл является пустым, глядя файл Javadoc, мы можем увидеть следующее описание в возвращении метода listFiles:

Возвращает: Массив абстрактных путей, обозначающих файлы и каталоги в каталоге, обозначенном это абстрактный путь. Массив будет пуст, если каталог пуст. Возвращает null, если это абстрактное имя пути не обозначает каталог, или если возникает ошибка ввода-вывода.

Похоже, что ваш путь недействителен.

+0

Да, я знаю, почему я получаю эту ошибку, но это не кажется логичным, так как я просмотрел этот каталог. Я показываю местоположение в Textview, и он равен директории, которую я хотел – user3493168

+0

Что у вас есть, если вы проверяете f на «exists()» или «isDirectory()»? попробуйте создать экземпляр файла, используя http://docs.oracle.com/javase/7/docs/api/java/io/File.html#File%28java.io.File,%20java.lang.String%29 –

+0

Это говорит, что путь не существует ... Знаете ли вы лучший метод для получения пути? Вместо String path = Environment.getExternalStorageDirectory(). ToString() + "/ Download" ;, мне нужно попасть в основную папку «Загрузка» телефона. Спасибо за ваш комментарий! – user3493168