1

我想列出位于应用程序目录内的每个文件夹。 到目前为止,我可以扫描目录并列出已创建的每个文件夹,并将存储在应用程序目录中的每个文件夹记录到控制台。在Android应用程序目录中创建文件夹列表

我首先检查用户文件夹是否存在。如果不是,它会创建它,然后它将变量“homeDir”设置为用户文件夹。

ArrayList<HashMap<String, String>> groupsList; 

File homeDir; 

private void isUserFolderExist() { 

    File m_applicationDir = new File(this.getFilesDir() + ""); 
    File Userfolder = new File(m_applicationDir + "/" + uid); 
    homeDir = Userfolder; 
    //File directory = getDir(uid, Context.MODE_PRIVATE); 

    //Log.v("creating", uid + " Folder"); 

    if (!Userfolder.exists()) { 
     Userfolder.mkdir(); 
    } else{ 
     //Log.v("Directory", "exists"); 
    } 

} 

我试图创建一个ArrayList的目录中找到的每个文件夹。在AsyncTask中使用下面的代码。我遵循了几个教程,这些教程展示了如何从json文件创建信息列表,并试图应用相同的方法。

class folders extends AsyncTask<String, String, String> { 

    protected String doInBackground(String... args) { 

     try { 

      File directory = homeDir; 

      File[] files = directory.listFiles(); 

      for(int i = 0; i < files.length;i++){ 

       String dirId = Integer.toString(i); 
       String name = files[i].getName(); 

       HashMap<String, String> groups = new HashMap<String, String>(); 

       groups.put("dirId", dirId); 
       groups.put("name", name); 

       groupsList.add(groups); 

      } 
     }catch (NullPointerException e){ 
      e.printStackTrace(); 
     }catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    protected void onPostExecute(String file_url) { 

     runOnUiThread(new Runnable() { 
      public void run() { 

       ListAdapter adapter = new SimpleAdapter(
         MainActivity.this, groupsList, 
         R.layout.list_item, new String[] { "dirId", "name"}, new int[] { 
           R.id.dirId, R.id.name}); 

       setListAdapter(adapter); 
      } 
     }); 

    } 

} 

当碰到groupsList.add(groups)时,遇到NullPointerException异常;

04-01 16:10:12.273: W/System.err(336): java.lang.NullPointerException 
    04-01 16:10:12.593: W/System.err(336): at com.example.folder.MainActivity$folders.doInBackground(MainActivity.java:433) 
    04-01 16:10:12.683: W/System.err(336): at com.example.folder.MainActivity$folders.doInBackground(MainActivity.java:1) 
    04-01 16:10:12.723: W/System.err(336): at android.os.AsyncTask$2.call(AsyncTask.java:185) 
    04-01 16:10:12.733: W/System.err(336): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
    04-01 16:10:12.733: W/System.err(336): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
    04-01 16:10:12.733: W/System.err(336): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 
    04-01 16:10:12.733: W/System.err(336): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 
    04-01 16:10:12.733: W/System.err(336): at java.lang.Thread.run(Thread.java:1096) 

我还没有找到为什么会发生这种情况的运气。

这是因为我想在AsyncTask中做到这一点?

任何帮助将不胜感激。

回答

1

我想你有未初始化你的清单。因此,如果您正在尝试解决某个对象的问题,则无需进行初始化,它将以空指针异常结束。

试图为循环前初始化的ArrayList ..

groupsList = new ArrayList<HashMap<String, String>>(); 
+0

对不起,我错过了一条线。我已经初始化groupList以下 'ArrayList > groupsList;' – woody1990

+0

这是正确的先生。 Hi @hariharan先生,我是来自Villupuram的sethu。我在KCT做过UG。 – Sethu

+0

@ woody1990这只是不能初始化。你必须初始化像我的答案 – Hariharan

相关问题