【问题标题】:Create list of Folders within Android app directory在 Android 应用程序目录中创建文件夹列表
【发布时间】:2014-05-11 17:26:44
【问题描述】:

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

我首先检查用户文件夹是否存在。如果没有,它将创建它,然后将变量“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 中执行此操作吗?

任何帮助将不胜感激。

【问题讨论】:

    标签: android arraylist android-asynctask nullpointerexception hashmap


    【解决方案1】:

    我猜你没有没有初始化你的列表。因此,如果您尝试使用对象而不进行初始化,最终会导致 Null 指针异常。

    尝试在 for 循环之前初始化您的 ArrayList..

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

    【讨论】:

    • 对不起,我错过了那一行。我已经用以下ArrayList&lt;HashMap&lt;String, String&gt;&gt; groupsList; 初始化了 groupList
    • 是的,先生。嗨@hariharan sir am sethu 来自 Villupuram。我在 KCT 做了 ma UG。
    • @woody1990 这只是声明而不是初始化。你必须像我的回答一样初始化
    • @Hariharan 非常感谢。你是对的。我以为我已经初始化了它。我将ArrayList&lt;HashMap&lt;String, String&gt;&gt; groupsList; 行更改为` ArrayList> groupsList = new ArrayList>();` 修复了它。
    • @hariharan 先生,实际上我看到了你,这就是为什么我只是向你发送 ma msg 先生。
    猜你喜欢
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 2018-12-31
    • 2020-05-22
    • 2019-01-02
    • 2019-11-18
    • 1970-01-01
    • 2010-10-08
    相关资源
    最近更新 更多