Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-暂停for循环,直到异步任务成功完成_Android_For Loop_Asynchronous_Android Asynctask - Fatal编程技术网

Android-暂停for循环,直到异步任务成功完成

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);

results对象包含N个JSON数组值。
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上获取触发器