删除并重新创建新文件后,创建文件的ListView

时间:2014-05-22 06:06:13

标签: android android-asynctask listactivity

我的应用程序的缓存文件夹中有一个文件夹。当我点击调用任务的同步按钮时。然后它连接到服务器并请求最新信息。这些以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();
                }
            }

        }

虽然上面的代码有时只会显示目录中文件列表中的一些项目。当我检查目录时,文件就在那里。如果我重新启动该过程,则所有文件都将显示在列表中。再做一次它重复只显示几个文件的问题。

提前致谢

1 个答案:

答案 0 :(得分:0)

您对两个不同的对象使用变量名称文件:

File[] files

HashMap<String, String> files

这不是一个好主意。特别是因为你在同一个循环中都使用它们。