Android 正确循环解析JSON的异步任务

Android 正确循环解析JSON的异步任务,android,json,listview,android-asynctask,onclicklistener,Android,Json,Listview,Android Asynctask,Onclicklistener,我有一个android应用程序。我扩展了AsyncTask类,如下所示: @Override protected Void doInBackground(String... data) { String jsonData = Webserv.getTaskJson(data[0]); taskArrayList.clear(); try { JSONArray jsonArray = new JSONArray(j

我有一个android应用程序。我扩展了AsyncTask类,如下所示:

@Override
    protected Void doInBackground(String... data) {
        String jsonData = Webserv.getTaskJson(data[0]);
        taskArrayList.clear();

        try {
            JSONArray jsonArray = new JSONArray(jsonData);

            for(int i=0; i<jsonArray.length(); i++){
                JSONObject t = jsonArray.getJSONObject(i);
                String taskString = t.getString("id");
                String latString = t.getString("lat");
                String lonString = t.getString("lon");
                String adrsString = t.getString("adrs");
                taskArrayList.add(taskString+ "#" +latString + "$" + lonString + "%" + adrsString); 
            }


        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;
    }


    @Override
    protected void onPostExecute(Void v){
        dialog.dismiss();
        taskAdapter.notifyDataSetChanged();
        super.onPostExecute(v);
    }

}
@覆盖
受保护的Void doInBackground(字符串…数据){
字符串jsonData=Webserv.getTaskJson(数据[0]);
taskaraylist.clear();
试一试{
JSONArray JSONArray=新的JSONArray(jsonData);

对于(int i=0;i您可以使用Timer和TimerTask在指定的时间间隔上执行AsyncTask,但请记住TimerTask在工作线程上执行,您应该只在UI线程上执行AsyncTask,因此您必须使用handler或runOnUithread方法来正确执行AsyncTask

如果您选择使用计时器,然后在onPause中失效并在onStart中重新启动,则不希望在应用程序处于后台时进行更新。如果您希望添加更多逻辑,如重新创建活动后使用的存储临时列表


另外,我看到您正在清除您的doInBackground中的列表,该列表当前由您的ListView使用,这是错误的,您应该从doInBackground返回新的列表内容并在onPostExecute中更新ListView,否则您将引入数据竞争。

对于刷新
ListView
,在2分钟后使用新值,您可以使用服务你还说了些什么?有什么例子吗?我需要每2分钟发表一篇文章,然后分析并重复所有内容。+当我有这样的事情时,使用服务是一个好主意吗,应该在UI线程之外完成吗?我是初学者@所有这些东西,抱歉如果被问到一些愚蠢的事情,请不要这样做…我希望它运行一个few秒。但我希望它现在运行几秒钟,我希望它在2分钟后运行几秒钟,然后在4分钟后等等。好吧,我想的第一件事是在解析这个JSON并从一开始就获取列表之前清除整个列表,不知怎的,我发现它是合乎逻辑的。我会记住你的建议,我会尝试以y的方式你建议,谢谢:)
taskList.setOnItemClickListener(new AdapterView.OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> parent, View viewClicked, int position, long id) {
            TextView tv = (TextView) viewClicked;
            String clicked= tv.getText().toString();
            String idTaskClicked = clicked.substring(0, clicked.indexOf('#'));
            String latTaskClicked = clicked.substring(clicked.indexOf('#')+1, clicked.indexOf('$'));
            String lonTaskClicked = clicked.substring(clicked.indexOf('$')+1, clicked.indexOf('%'));
            String adrsTaskClicked = clicked.substring(clicked.indexOf('%')+1);

            Intent intent = new Intent(context, TaskDetailsActivity.class);
            intent.putExtra(EXTRA_TASK_ID, idTaskClicked);
            intent.putExtra(EXTRA_ID, getIntent().getStringExtra(MainActivity.EXTRA_ID));
            intent.putExtra(EXTRA_USERNAME, getIntent().getStringExtra(MainActivity.EXTRA_USERNAME));
            intent.putExtra(EXTRA_TASK_LAT, latTaskClicked);
            intent.putExtra(EXTRA_TASK_LON, lonTaskClicked);
            intent.putExtra(EXTRA_TASK_ADRS, adrsTaskClicked);

            startActivity(intent);

        }   

    });