Android 正确循环解析JSON的异步任务
我有一个android应用程序。我扩展了AsyncTask类,如下所示: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
@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);
}
});