【发布时间】:2015-12-14 07:42:25
【问题描述】:
我正在开发 android 应用程序以从 url 检索 JSON 数据并显示它。
我的要求:- 我有 JSON 数据数组,我必须每 5 秒显示一次每个数组项数据,一旦执行了所有数组项,它应该像往常一样再次调用 onpostexecute 它应该从第一个数组开始
private class DownloadJSON extends AsyncTask<Void,Void,Void> {
@Override
protected Void doInBackground(Void... params) {
arraylist = new ArrayList<HashMap<String, String>>();
JSONObject jsonobject = JSONfunctions.getJSONfromURL(url);
try {
String link = jsonobject.getString("link");
jsonarray = jsonobject.getJSONArray("api");
for (int i = 0; i < jsonarray.length(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
jsonobject = jsonarray.getJSONObject(i);
String title = jsonobject.getString("Title");
String subtitle = jsonobject.getString("Subtitle");
String image = jsonobject.getString("image");
map.put("title",jsonobject.getString("Title"));
map.put("sub",jsonobject.getString("Subtitle"));
map.put("image",link+jsonobject.getString("image"));
arraylist.add(map);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
for (int i=0; i<arraylist.size();i++){
final String tit = arraylist.get(i).get("title");
final String subtit = arraylist.get(i).get("sub");
String img = arraylist.get(i).get("image");
new Thread(new Runnable() {
@Override
public void run() {
while (true){
try{
Thread.sleep(5000);
mHandler.post(new Runnable() {
@Override
public void run() {
t1.setText(tit);//t1,t2 is textview
t2.setText(subtit);
}
});
}catch (Exception e){
}
}
}
}).start();
}
}
}
实际上,上面的代码部分工作,这意味着它第一次工作,但 5 秒后它正在刷新,但数据在一段时间后没有更新每个项目每 5 秒一次,它应该在项目执行完成后重新启动 onpostexecute,然后像往常一样,依此类推
【问题讨论】:
-
t1.setText(tit);//t1,t2 is textview t2.setText(subtit);将在调用 onPostExecute 后 5 秒后仅执行一次。您需要设置警报管理器以每 5 秒启动一次异步任务
-
有很多事情是错误的,比如你在 for 循环中创建一个线程等等。请检查您的代码。我建议使用 Alarm Manager 或简单地使用 timertask。
-
@Dhina 你的意思是我必须使用警报管理器而不是处理程序?
-
@IntelliJAmiya 我只使用处理程序,你能告诉我在我的要求中我们必须如何使用处理程序
-
@Dhina 我不想启动整个 asyntask 我只想启动 onpostexecute 因为我已经从 url 获取并将其存储到 arraylist 我想执行 arraylist 中的每个项目应该来自 5秒的