在android中获取Pictures文件夹的文件夹大小时出错

时间:2013-11-27 08:27:22

标签: java android file android-fragments nullpointerexception

我在Play商店发布了我的新应用程序,用户告诉我,当他在应用程序中打开一个片段时,应用程序崩溃了..我有logCat:

java.lang.NullPointerException
at com.dd.androreboot.devicefragment.getFolderSize(devicefragment.java:216)
at com.dd.androreboot.devicefragment.onCreateView(devicefragment.java:95)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:829)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035)
at android.app.BackStackRecord.run(BackStackRecord.java:635)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1397)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:426)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4849)
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:795)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
at dalvik.system.NativeStart.main(Native Method)

并且在第95行我有这个

// Pictures
        File pictures = new File(Environment.getExternalStorageDirectory().getPath()+"/Pictures/");
        float picturesize=getFolderSize(pictures)/(1024f*1024f);

他有一个Lg optimus L9 P760所以我认为问题是手机没有得到Picture文件夹,或者它不在那个路径中,所以应用程序崩溃了......可能这是问题吗?

2 个答案:

答案 0 :(得分:2)

对于普通的Android手机,默认情况下应该存在

/ sdcard /图片(但是在使用之前你也应确保该文件夹存在)。但最可能的原因可能是许可问题。

您是否需要READ_EXTERNAL_STORAGE权限?用户可能能够在开发人员设置中强制执行此权限请求。如果在安装期间已授予“READ”权限,则此选项将使系统检查应用程序。如果您还没有这样做,则无法在SD卡中打开文件。

查看此权限的官方文档说明:

public static final String READ_EXTERNAL_STORAGE

在API级别16中添加 允许应用程序从外部存储读取。

任何声明WRITE_EXTERNAL_STORAGE权限的应用都会被隐式授予此权限。

此权限从API级别19开始强制执行。在API级别19之前,不会强制执行此权限,并且所有应用程序仍有权从外部存储读取。您可以通过在运行Android 4.1或更高版本的设备上的“设置”应用中的“开发者”选项下启用“保护USB存储”来强制执行权限来测试您的应用。

同样从API级别19开始,读取/写入getExternalFilesDir(String)和getExternalCacheDir()返回的特定于应用程序的目录中的文件不需要此权限。

注意:如果您的minSdkVersion和targetSdkVersion值都设置为3或更低,系统会隐式授予您的应用此权限。如果您不需要此权限,请确保您的targetSdkVersion为4或更高。


我不确定Lg optimus L9 P760是否有可移动SDCARD,如果是这样,这也是另一种可能性。

答案 1 :(得分:0)

你有点回答了自己的问题。该目录不存在,因此尝试在其上列出文件会导致NullPointerException

您应首先验证它是否存在:

File pictures = new File(Environment.getExternalStorageDirectory().getPath()+"/Pictures/");
if (pictures.exists()) 
    float picturesize=getFolderSize(pictures)/(1024f*1024f);