Android-暂停for循环,直到异步任务成功完成
results对象包含N个JSON数组值。Android-暂停for循环,直到异步任务成功完成,android,for-loop,asynchronous,android-asynctask,Android,For Loop,Asynchronous,Android Asynctask,results对象包含N个JSON数组值。for循环在第一个异步任务完成之前运行(启动)第二个数组值。我想在当前数组值成功完成后执行并移动到下一个数组值,如果不等待它完成的话 if (results.length() > 0) { for (int i = 0; i < results.length(); i++) { JSONObject object = results .getJSONObject(i);
for循环在第一个异步任务完成之前运行(启动)第二个数组值。我想在当前数组值成功完成后执行并移动到下一个数组值,如果不等待它完成的话
if (results.length() > 0) {
for (int i = 0; i < results.length(); i++) {
JSONObject object = results
.getJSONObject(i);
FeedDataType item = new FeedDataType(
object);
AsyncTasks performBackgroundTask = new AsyncTasks();
performBackgroundTask.execute(item);
DBadapter.add(item);
Log.e("Aynsc Task",performBackgroundTask.getStatus().toString());
}
}
if(results.length()>0){
对于(int i=0;i
日志结果仅显示挂起(或)正在运行,但未显示完成给我一个不影响用户界面的解决方案。
而且,我不想在Asynctask类上使用get()方法。如果您使用的是Asynck任务,请尝试重写AntivateExecute方法
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
return null;
}
protected void onPostExecute(Long result) {
//This will call after doInBackground finished.
}
}
私有类下载文件任务扩展异步任务{
受保护的长doInBackground(URL…URL){
返回null;
}
受保护的void onPostExecute(长结果){
//这将在doInBackground完成后调用。
}
}
在OnPostExete方法下编写代码异步任务的使用方法如下所示
private class TaskBK extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
return null;
}
protected void onPostExecute(Long result) {
//This will call after the doInBackground method get completed.
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// This will get executed before doInBackground method get executed
}
}
私有类TaskBK扩展异步任务{
受保护的长doInBackground(URL…URL){
返回null;
}
受保护的void onPostExecute(长结果){
//这将在doInBackground方法完成后调用。
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//这将在执行doInBackground方法之前执行
}
}
也面临同样的问题。问题是你不能“暂停”循环,相反,你能做的是给循环一个延迟,让异步任务有时间完成运行。
尝试大约3秒的延迟。这是如何做到的:
for (int i = 0; i < results.length(); i++) {
JSONObject object = results
.getJSONObject(i);
FeedDataType item = new FeedDataType(
object);
AsyncTasks performBackgroundTask = new AsyncTasks();
performBackgroundTask.execute(item);
DBadapter.add(item);
Log.e("Aynsc Task",performBackgroundTask.getStatus().toString());
Thread.sleep(3000);
}
for(int i=0;i
主线程将睡眠延迟三秒,以允许异步任务完成执行,而循环将在延迟后继续。如果你觉得这有帮助,请投上一票。不,那没有帮助……我不想那样……我只需要知道异步任务是否完成……如果可能的话,我需要的是,
应该每N秒运行一次代码,并且能够在上一次完成时停止并重新启动,一旦它进入onPostexecute方法async task wll completed。。你还想要什么?请仔细阅读描述。for循环在上一个迭代完成之前进入下一个迭代…我想等待for循环,直到异步任务完成并保存图像。我完成了一次。如果你这样做,你的用户界面就会冻结。如果你想告诉我,我会告诉你我做了什么。我确信这不是一个好的做法。没有用…我不想在Asynctask类中这样做。您可以创建一个后台服务并执行此过程,如果您仍然需要使用Async任务,您可以有一个侦听器(接口),它在onPostExcecute上获取触发器