我有一个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?
我做了一切,但我没有。 谢谢你的帮助。
答案 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()