在Android应用程序目录中创建文件夹列表

时间:2014-04-01 05:19:29

标签: android arraylist android-asynctask nullpointerexception hashmap

我想列出app目录中的每个文件夹。 到目前为止,我可以扫描目录并列出已创建的每个文件夹,并将存储在app目录中的每个文件夹记录到控制台。

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

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 个答案:

答案 0 :(得分:1)

我猜您未初始化您的列表。所以,如果你试图解决一个对象没有初始化,它将在Null指针异常中结束你。

尝试在for循环之前初始化ArrayList。

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