我有一個android應用程序。我擴展AsyncTask類如下:正確地循環解析JSON的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);
}
}
函數getTaskJson返回JSON字符串,然後我解析。分析字符串打印在ListView項目中。一切正常(即使切斷這些字符串似乎愚蠢的我,但我沒有更好的主意如何獲取數據的其他方式)
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);
}
});
好了,反正這一切工作正常了。問題是:我需要這個應用程序與我的網頁同步。爲了保持它「同步」,我想LOOP這個AsyncTask獲取JSON並解析/將任務放入ListView中。例如,我想用新值「刷新」這個ListView,比如2分鐘。任何建議我怎麼能這樣做?還有一個問題:在從列表視圖中點擊一個項目後,我開始新的活動。點擊後面的「返回」(在這裏回到給定的)後,我會遇到任何與AsyncTasks有關的問題(實際上有兩個問題:一個用於解析JSON,第二個用於發送帶有地理座標的POST)。
親切的問候!
用於在2分鐘後刷新帶有新值的'ListView',您可以使用服務 –
您能說更多嗎?任何示例?我需要每2分鐘完成一次POST,然後解析並重復所有內容。 +當我有這樣的事情時使用服務是一個好主意,應該在UI Thread之外完成?我是初學者@所有這些東西,對不起,如果被問到有關愚蠢的東西 – user2987001
請參閱http://www.vogella.com/tutorials/AndroidServices/article.html請 –