AsyncTask在第二个AsyncTask启动之前返回结果

时间:2015-01-22 07:09:49

标签: android

我读过类似的主题,但没有得到明确的答案。 我的应用程序使用AsyncTask in循环来计算城市之间的距离。因此,我的应用程序多次与Google Maps API进行通信。问题是变量" i" of循环在结果返回之前取最终值。如何确保在第一个AsyncTask返回结果之后执行第二个AsyncTask;

部分代码......

for(n=0;n<b-1;n++){                     

                if(!itinList1.get(n+1).get("username").equals(username)){   

                if(itinList1.get(n).get("username").equals(username)){                      


            origin_lat = itinList1.get(n).get("start_lat_pro").toString();
            origin_lng = itinList1.get(n).get("start_lng_pro").toString();
            destination_lat = itinList1.get(n).get("final_lat_pro").toString();
            destination_lng = itinList1.get(n).get("final_lng_pro").toString();

            for (w = n; w < b; w++) {                       

                markerPoints = new ArrayList<LatLng>();             

                waypoint1_lat = itinList1.get(w).get("start_lat_pro").toString();
                waypoint1_lng = itinList1.get(w).get("start_lng_pro").toString();
                waypoint2_lat = itinList1.get(w).get("final_lat_pro").toString();
                waypoint2_lng = itinList1.get(w).get("final_lng_pro").toString();

                LatLng origin1 = new LatLng(Double.parseDouble(origin_lat),
                        Double.parseDouble(origin_lng));
                LatLng destination = new LatLng(
                        Double.parseDouble(destination_lat),
                        Double.parseDouble(destination_lng));
                LatLng waypoint1 = new LatLng(
                        Double.parseDouble(waypoint1_lat),
                        Double.parseDouble(waypoint1_lng));
                LatLng waypoint2 = new LatLng(
                        Double.parseDouble(waypoint2_lat),
                        Double.parseDouble(waypoint2_lng));


                markerPoints.add(origin1);
                markerPoints.add(destination);
                markerPoints.add(waypoint1);
                markerPoints.add(waypoint2);

                LatLng or = markerPoints.get(0);
                LatLng dest = markerPoints.get(1);


                // Getting URL to the Google Directions API
                String url = getDirectionsUrl(or, dest);

                DownloadTask downloadTask = new DownloadTask();     

                downloadTask.execute(url);                      

                if(itinList1.get(w+1).get("username").equals(username)){    

                    break;
                }

            }           

            }
                } else {
                    itinList1.get(n).put("diff", String.valueOf(0));

            }               
                } 

我知道嵌套AsyncTask不是一个好主意,但现在很难改变它

2 个答案:

答案 0 :(得分:1)

阅读java中的Callback机制。

1)实现一个接口,例如

interface OnAsyncOneComplete {
    void onProcessFinish();


}

2)在您的AsyncTask onPostExecute()中,在reference.onProcessFinish();调用AsyncTask

中创建此界面的引用

3)在您呼叫的任何一个班级中,拨打onProcessFinish()中的其他OnAsyncOneComplete,实施{{1}}

答案 1 :(得分:0)

您应该执行以下操作:有关详细信息,请参阅here

enter image description here

在第一个asyncTask的onPostExecute()方法中写入第二个asysncTask的调用


onPostExecute()

是AsyncTask的方法,在doInBackground()完成其工作时执行