如何刷新listview AsyncTask

时间:2017-07-11 16:40:35

标签: android listview android-asynctask

我有一个json文件,我想每分钟检查一次这个json,因为我的json每分钟都在变化。 我可以用这种方式从URL中解析json;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            new ReadJSON().execute("http://www.url.com/json1.json");
        }
    });
}

class ReadJSON2 extends AsyncTask<String, Integer, String> {

    @Override
    protected String doInBackground(String... params) {
        return readURL(params[0]);
    }

    @Override
    protected void onPostExecute(String content) {
        try {
            JSONObject jsonObject = new JSONObject(content);
            JSONArray jsonArray =  jsonObject.getJSONArray("level");
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject c = jsonArray.getJSONObject(i);
                JSONArray server = c.getJSONArray("server");
                for(int j=0; j<server.length(); j++){
                    JSONObject serverObject = server.getJSONObject(j);
                    String name = serverObject.getString("name");
                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
          }
    }
}

我如何每分钟检查一次这个json?

我做了一切,但我没有。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

解析json后,在listview.invalidateViews();方法中使用adapter.notifyDataSetchanged();onPostExecute方法。 如果某些内容已在附加到适配器的列表中更改/添加/删除,则此方法有效。 所以每当你解析你的数据。确保object of adapter and the List/JsonArray保持不变。意味着每次在Web服务结果上都不要初始化它。只需像这样使用它 - &gt; list.add(some data);jsonArray.put(some data);

如果我误解了,请告诉我。

答案 1 :(得分:0)

我们可以使用TimerTask来解决这个问题:

public void initializeTimerTask() {

    timerTask = new TimerTask() {
        public void run() { 
        //use a handler to run a toast that shows the current timestamp
            handler.post(new Runnable() {
                public void run() {
                     new ReadJSON().execute("http://www.url.com/json1.json");
                }
            });
        }
    };


public void startTimer() {
    //set a new Timer
    timer = new Timer();

    //initialize the TimerTask's job
    initializeTimerTask();

    //schedule the timer, after the first 0ms the TimerTask will run every 1m
    timer.schedule(timerTask, 0, 60 * 1000); //
}

on post post,在解析JSON之后,你应该在这里检查适配器,如果它第一次是空的,你通过这个json设置适配器,如果它已经有数据,请打电话adapter.notifyDataSetChanged()