2015-04-08 8 views
1

Я пытаюсь создать приложение, в котором перечислены все файлы в каталоге, и позволяет пользователю нажать на файл и открыть его в определенном приложении в зависимости от расширения файла. До сих пор я написал этот код, чтобы перечислить все файлы в каталоге, но он, похоже, не работает - он просто сбрасывает приложение.Android: Список всех файлов в каталоге

Может ли кто-нибудь посоветовать, почему, пожалуйста? Я попытался реплицировать другие фрагменты кода, которые я нашел в SO и других местах, но ни один из них не работает.

Заранее спасибо

String home = Environment.getExternalStorageDirectory().toString() + "/vuza/" + username; 
Toast.makeText(this, "Debug: " + home, Toast.LENGTH_SHORT).show(); 

File root = new File(home); 

File fileList[] = root.listFiles(); 

for(int x = 0; x < fileList.length; x++) { 
    Toast.makeText(this, fileList[x].getName(), Toast.LENGTH_SHORT).show(); 
} 

EDIT: Добавлен стек трассировки

04-08 19:29:39.230 5264-5264/com.mikekaperys.assignment E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.mikekaperys.assignment, PID: 5264 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mikekaperys.assignment/com.mikekaperys.assignment.Files}: java.lang.NullPointerException 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363) 
      at android.app.ActivityThread.access$900(ActivityThread.java:161) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:157) 
      at android.app.ActivityThread.main(ActivityThread.java:5356) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NullPointerException 
      at com.mikekaperys.assignment.Files.onCreate(Files.java:32) 
      at android.app.Activity.performCreate(Activity.java:5426) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363) 
            at android.app.ActivityThread.access$900(ActivityThread.java:161) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:157) 
            at android.app.ActivityThread.main(ActivityThread.java:5356) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
            at dalvik.system.NativeStart.main(Native Method) 
+0

добавить трассировки стека? –

+0

Опубликуйте журналы сбоев, чтобы было легко решить проблему. – Iqbal

+0

Отправьте свой логарифм, пожалуйста. – ApolloSoftware

ответ

1

1) Поместите это в манифесте:

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

2) Также проверьте, существует ли путь home.

3)fileList.length может возвращать null, если в нем нет каталога. Проверьте, нет ли fileList до loop.

0

Замените код ниже одного

String home = Environment.getExternalStorageDirectory().toString() + "/vuza/" + username; 

файл File = новый файл (дом);

if(file.exists()) 
{ 
//method call 
    listf(home); 
} 
else 
{ 
Toast.makeText(this,"no dir extists"), Toast.LENGTH_SHORT).show(); 
} 

public File[] listf(String directoryName) { 

    // .............list file 
    File directory = new File(directoryName); 

    // get all the files from a directory 
    File[] fList = directory.listFiles(); 

    for (File file : fList) { 
     if (file.isFile()) { 
      System.out.println(file.getAbsolutePath()); 
     } else if (file.isDirectory()) { 
      listf(file.getAbsolutePath()); 
     } 
    } 
    System.out.println(fList); 
    return fList; 
} 

также убедитесь, что вы дали следующие разрешения

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
Смежные вопросы