我的应用程序的缓存文件夹中有一个文件夹。当我点击调用任务的同步按钮时。然后它连接到服务器并请求最新信息。这些以json格式返回给我。然后我想清除返回的json中不再存在的文件内容的文件夹。在测试中,我删除文件夹的所有子对象并重新创建它们。我使用Async任务来执行此操作。但之后,它并不总是返回文件夹的所有内容。我有时候必须按两次同步。
json格式
{
"success" : "1",
"forms" : [
{
"cid" : "3",
"name" : "File 1",
"fid" : "1"
},
{
"cid" : "3",
"name" : "File 2",
"fid" : "2"
},
{
"cid" : "3",
"name" : "File 3",
"fid" : "3"
}
]
}
以下代码是我用来删除文件的代码。
String[] children = homeDir.list();
for(int i = 0; i < children.length; i++){
new File(homeDir, children[i]).delete();
}
这是我用来从服务器获取json的东西
JSONObject json = jParser.makeHttpRequest(files, "GET", params);
然后我浏览json并使用名称作为参考创建文件。
JSONArray files = json.getJSONArray(TAG_FILES);
for(int i = 0; i < files.length(); i++){
JSONObject c = files.getJSONObject(ii);
String fileName = c.getString(TAG_NAME);
createfile(fileName);
}
以下是Async任务的代码,该任务扫描HomeDir,然后使用找到的文件更新ListAdapter。
static File homeDir;
File Userfolder = new File(cache + "/" + uid);
ArrayList<HashMap<String, String>> filesList = new ArrayList<HashMap<String, String>>();
private class UpdateList extends AsyncTask<String,String,String>{
@Override
protected String doInBackground(String... params) {
try{
File directory = homeDir;
File[] files = directory.listFiles();
for(int i = 0; i < files.length; i++){
String name = files[i].getName();
HashMap<String, String> files = new HashMap<String, String>();
files.put("name", name);
filesList.add(files);
}
}catch(NullPointerException e){
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url){
try{
runOnUiThread(new Runnable(){
public void run(){
ListAdapter adapter = new SimpleAdapter(
MainActivity.this,
filesList,
R.layout.activity_main,
new String[] {"name"},
new int[]{R.id.fileName}
);
setListAdapter(adapter);
}
});
}catch (Exception e){
e.printStackTrace();
}
}
}
虽然上面的代码有时只会显示目录中文件列表中的一些项目。当我检查目录时,文件就在那里。如果我重新启动该过程,则所有文件都将显示在列表中。再做一次它重复只显示几个文件的问题。
提前致谢
答案 0 :(得分:0)
您对两个不同的对象使用变量名称文件:
File[] files
和
HashMap<String, String> files
这不是一个好主意。特别是因为你在同一个循环中都使用它们。