在我的第一个AsyncTask doInBackground
方法中,我运行了一个从Google Place Api获取地点列表的方法。在第一个AsyncTask的postExecute
内,我得到了这些地方的所有名称,并在ListView中显示它们。
我现在想要显示一个地方距离我当前位置的行车距离(我已经可以得到它)。为此,我在另一个类中创建了另一个AsyncTask以获得此距离。这是代码:
public class Distance extends AsyncTask<Double, Double, String> {
GooglePlaces googlePlaces;
String distancePlace = null;
@Override
final protected String doInBackground(Double... params) {
double lat1,lat2,lon1,lon2;
lat1=params[0];
lon1=params[1];
lat2=params[2];
lon2=params[3];
googlePlaces = new GooglePlaces();
distancePlace= googlePlaces.getDistance(lat1,lon1,lat2,lon2);
return distancePlace;
}
}
这是我的第一个AsyncTask postExecute
的代码:
protected void onPostExecute(String s) {
runOnUiThread(new Runnable() {
@Override
public void run() {
//get json status
String status = nearPlaces.status;
if (status.equals("OK")){
if (nearPlaces.results != null){
//every single place
for (Place p : nearPlaces.results){
//just a try, here I would like to get the distance
/*
Double[] myparams = {gps.getLatitude(),gps.getLongitude(),
p.geometry.location.lat,p.geometry.location.lng};
new Distance().execute(myparams);*/
HashMap<String,String> map = new HashMap<String, String>();
map.put(KEY_NAME,p.name);
//add hashmap
placesListItems.add(map);
}
ListAdapter adapter = new SimpleAdapter(GpsActivity.this, placesListItems, R.layout.list_item, new String[] {KEY_REFERENCE,KEY_NAME},
new int[] {R.id.reference, R.id.name});
//add into listview
lv.setAdapter(adapter);
}
我的问题是如何执行&#34;距离AsyncTask&#34;在我的postExecute中,将其结果返回到我的第一个AsyncTask中,以便在我的ListView中显示它。
答案 0 :(得分:0)
您可以这样做:
Distance distance = new Distance(){
protected void onPostExecute(final String result1) {
// First AsyncTask result.
Distance distance2 = new Distance(){
protected void onPostExecute(String result2) {
// process the second result.
// Because the first result "result1" is "final",
// it can be accessed inside this method.
}
};
distance2.execute(...);
}
};
distance.execute(...);
此外,您不需要使用runOnUiThread(...)
,因为在{i}方法上执行onPostExecute(...)
方法。