Android 环境中的NPE。getExternalStorageState()?

Android 环境中的NPE。getExternalStorageState()?,android,android-external-storage,Android,Android External Storage,找不到获取“空指针异常”的原因。我可以显式地检查“getStorageState是否为null”,但这并不能解释为什么会出现此错误。 错误是: java.lang.NullPointerException at android.os.Environment.getStorageState(Environment.java:719) at android.os.Environment.getExternalStorageState(Environment.java:694) at com.ciqu

找不到获取“空指针异常”的原因。我可以显式地检查“getStorageState是否为null”,但这并不能解释为什么会出现此错误。 错误是:

java.lang.NullPointerException
at android.os.Environment.getStorageState(Environment.java:719)
at android.os.Environment.getExternalStorageState(Environment.java:694)
at com.ciqual.android.insight.sessionService.RemoveFiles(SessionService.java:664)
com.vyshas.android.sessionService.onEndSession(SessionService.java:460)
at:(错误指向的行是:)(见Jellybean4.3和kitkat)


Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState)不会导致NPE,而Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)会导致NPE并使应用程序崩溃


我仍然不知道为什么getExternalStorageState为空,即使我设置了权限,但解决方案至少不会使应用程序崩溃。

我从Android 4.3获得了类似的报告

源代码是:

    /**
     * Gets the current state of the primary "external" storage device.
     *
     * @see #getExternalStorageDirectory()
     */
    public static String getExternalStorageState() {
        try {
            IMountService mountService = IMountService.Stub.asInterface(ServiceManager
                    .getService("mount"));
            final StorageVolume primary = getPrimaryVolume();
            return mountService.getVolumeState(primary.getPath());
        } catch (RemoteException rex) {
            Log.w(TAG, "Failed to read external storage state; assuming REMOVED: " + rex);
            return Environment.MEDIA_REMOVED;
        }
    }

我无事可做,只能试着抓住它。

你在运行什么版本的Android?另外,为了确认一下,你是说你的代码片段的第一行在第719行吗?你能发布你的完整堆栈跟踪吗?@cybersam:它出现在android 4.3和4中。4@nKn已添加堆栈跟踪…我认为如果条件是(Environment.MEDIA_MOUNTED).equals(Environment.getExternalStorageState)它不会停止执行流,也不会导致NPE崩溃。。。
    /**
     * Gets the current state of the primary "external" storage device.
     *
     * @see #getExternalStorageDirectory()
     */
    public static String getExternalStorageState() {
        try {
            IMountService mountService = IMountService.Stub.asInterface(ServiceManager
                    .getService("mount"));
            final StorageVolume primary = getPrimaryVolume();
            return mountService.getVolumeState(primary.getPath());
        } catch (RemoteException rex) {
            Log.w(TAG, "Failed to read external storage state; assuming REMOVED: " + rex);
            return Environment.MEDIA_REMOVED;
        }
    }