我想列出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中做这件事吗?
非常感谢任何帮助。
答案 0 :(得分:1)
我猜您未初始化您的列表。所以,如果你试图解决一个对象没有初始化,它将在Null指针异常中结束你。
尝试在for循环之前初始化ArrayList。
groupsList = new ArrayList<HashMap<String, String>>();