【问题标题】:Trying to list all folders/files from internal sdcard android but get a null试图从内部 sdcard android 中列出所有文件夹/文件,但得到一个空值
【发布时间】:2016-01-07 17:25:58
【问题描述】:

我正在尝试列出我的外部存储中的所有文件,但总是返回 null。

if (Environment.getExternalStorageDirectory().exists()) {
        Log.i(FILE, "is not empty");

        File[] files = Environment.getExternalStorageDirectory().listFiles();

        for (File file : files) {
            Log.i("File ", file.getAbsolutePath());
        }
    }

如何让它列出外部目录中的所有文件

我得到一个异常

Caused by: java.lang.NullPointerException
                                                                                  at com.example.sam.read.fragments.MyFragment.onCreate(MyFragment.java:138)
                                                                                  at android.support.v4.app.Fragment.performCreate(Fragment.java:1763)
                                                                                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:913)
                                                                                  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
                                                                                  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
                                                                                  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489)
                                                                                  at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:548)
                                                                                  at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1164)
                                                                                  at android.app.Activity.performStart(Activity.java:5114)
                                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2153)
                                                                                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
                                                                                  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
                                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
                                                                                  at android.os.Handler.dispatchMessage(Handler.java:99) 
                                                                                  at android.os.Looper.loop(Looper.java:137) 
                                                                                  at android.app.ActivityThread.main(ActivityThread.java:5041) 
                                                                                  at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                                  at java.lang.reflect.Method.invoke(Method.java:511) 
                                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
                                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
                                                                                  at dalvik.system.NativeStart.main(Native Method) 

【问题讨论】:

  • 你在哪一行得到异常?
  • 138MyFragment.java 中的行号是什么?
  • 检查 MyFragment 的 onCreate() 中的第 138 行。某些变量未初始化,导致 NullPointerException
  • 我得到了 for 循环中抛出的异常
  • 这是我今天早些时候提出的这个问题的扩展stackoverflow.com/questions/34658494/…

标签: java android android-file


【解决方案1】:

您的清单中缺少权限。添加

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

到您的清单。

【讨论】:

【解决方案2】:

NullPointer 可能来自for (File file : files),原因是filesnull

From the documentation,listFiles()如果指定路径不是目录则返回null;它没有告诉你的是,如果你有文件系统权限问题,你很可能也会得到这个值。

if ( Environment.getExternalStorageDirectory().exists() )

您是否拥有清单中定义的所需权限?

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

如果这不是问题,那么我唯一的想法是FILEnull,或者 138 行不在此 sn-p 中。

【讨论】:

  • 我有权限,它被抛出“for (File file : files)”
  • 你能在那行之后设置一个断点吗?查看files 包含的内容。
  • 他有一个 NPE,所以files 将为空。现在的问题是为什么listFiles 返回那个空值。
  • 这是我之前问过的这个问题的扩展stackoverflow.com/questions/34658494/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-01
  • 2018-08-06
  • 2014-09-17
  • 1970-01-01
  • 2018-11-12
  • 2015-01-01
  • 1970-01-01
相关资源
最近更新 更多