我在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文件夹,或者它不在那个路径中,所以应用程序崩溃了......可能这是问题吗?
答案 0 :(得分:2)
/ 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);