2015-10-21 37 views
0
public void GetFiles(String Path, String Extension, boolean IsIterative) 
    { 
     File[] files = new File(Path).listFiles(); 
     Map<String , String> map ; 
     for (int i = 0; i < files.length; i++) 
     { 
      File f = files[i]; 
      if (f.isFile()) 
      { 
       if (f.getPath().substring(f.getPath().length() - Extension.length()).equals(Extension)) 
       { 
        map = new HashMap<String, String>(); 
        map.put("img", f.getPath()); 
        map.put("name", f.getName()); 
        lstPics.add(map); 
       } 
       if (!IsIterative) 
        break; 
      } 
      else if (f.isDirectory() && f.getPath().indexOf("/.") == -1) 
       GetFiles(f.getPath(), Extension, IsIterative); 
     } 
    } 

爲什麼它在Android 4.4中運行良好,並在android 6.0中發生錯誤? java.lang.NullPointerException:試圖獲得空數組的長度 我使用samsung注4運行android 4.4.4 我使用nexus 5運行andoroid 6.0。爲什麼「新文件(路徑)」不適用於Android 6.0

10-21 11:55:03.891 23515 23515 E AndroidRuntime: java.lang.NullPointerException: Attempt to get length of null array 
10-21 11:55:03.891 23515 23515 E AndroidRuntime: at qjizho.vrlauncher.Launcher.GetFiles(Launcher.java:137) 
10-21 11:55:03.891 23515 23515 E AndroidRuntime: at qjizho.vrlauncher.Launcher$1.onItemClick(Launcher.java:58) 
10-21 11:55:03.891 23515 23515 E AndroidRuntime: at android.widget.AdapterView.performItemClick(AdapterView.java:310) 
10-21 11:55:03.891 23515 23515 E AndroidRuntime: at android.widget.AbsListView.performItemClick(AbsListView.java:1145) 
10-21 11:55:03.891 23515 23515 E AndroidRuntime: at android.widget.AbsListView$PerformClick.run(AbsListView.java:3042) 
10-21 11:55:03.891 23515 23515 E AndroidRuntime: at android.widget.AbsListView$3.run(AbsListView.java:3879) 
10-21 11:55:03.891 23515 23515 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739) 
10-21 11:55:03.891 23515 23515 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95) 
10-21 11:55:03.891 23515 23515 E AndroidRuntime: at android.os.Looper.loop(Looper.java:148) 
10-21 11:55:03.891 23515 23515 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5417) 
10-21 11:55:03.891 23515 23515 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 
10-21 11:55:03.891 23515 23515 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
10-21 11:55:03.891 23515 23515 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
+0

請確保您有存儲許可 – dex

回答

1

這是因爲您沒有存儲權限,並且在默認情況下未授予Android M存儲空間。

請發佈您的目標SDK是什麼?你也問過AndroidManifest.xml中的存儲權限嗎?

public void GetFiles(String Path, String Extension, boolean IsIterative) 
     { 
      File[] files = new File(Path).listFiles(); <== This particular line is working fine no issue 
      Map<String , String> map ; 
      for (int i = 0; i < files.length; i++) <== this line is giving the Null Pointer Exception because since you don't have storage permission, so files are coming null. 
      { 
       File f = files[i]; 
       if (f.isFile()) 
       { 
        if (f.getPath().substring(f.getPath().length() - Extension.length()).equals(Extension)) 
        { 
         map = new HashMap<String, String>(); 
         map.put("img", f.getPath()); 
         map.put("name", f.getName()); 
         lstPics.add(map); 
        } 
        if (!IsIterative) 
         break; 
       } 
       else if (f.isDirectory() && f.getPath().indexOf("/.") == -1) 
        GetFiles(f.getPath(), Extension, IsIterative); 
      } 
     } 
+0

我有添加的權限在這樣的清單:<使用許可權的android:NAME = 「android.permission.READ_EXTERNAL_STORAGE」/> –

+0

而在gradle這個: ''' compileSdkVersion 23 buildToolsVersion 「23.0.1」 defaultConfig { 的applicationID 「qjizho.vrlauncher」 的minSdkVersion 19 targetSdkVersion 23 的versionCode 1 的versionName 「1.0」 } '' ' –

+0

@ qijiangzhou在設置 - >應用 - >權限(如果你的應用有存儲權限)檢查設置默認情況下,如果你的目標是android -M存儲權限沒有被授予,你需要做存儲權限的請求。 – dex

相關問題