Android Asynctask在onCreate of Activity中返回值

时间:2014-05-23 19:31:24

标签: java android for-loop android-asynctask

这里在for loop我想调用异步返回值。我希望在标题后在片段中调用该值。

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_full_map);
Intent i = getIntent();
lat = i.getStringArrayListExtra("L");
longi = i.getStringArrayListExtra("Longitude");
len=lat.size();
for(;j<len;j++){            
LatLng location = new   LatLng(Double.valueOf(lat.get(j)).doubleValue(),
  Double.valueOf(longi.get(j)).doubleValue()) ;
        new ReverseGeocodingTask(getBaseContext()).execute(location);
        googlemap.addMarker(new MarkerOptions()
        .title(plat.get(j).toString())
        .snippet(snippet)
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_CYAN))
        .position(location)
        );
    }
}

下面是我的AsyncTask代码,我将返回值。请一些人看一看并向我解释我的愚蠢错误......

private class ReverseGeocodingTask extends AsyncTask<LatLng, Void, String>
 {
     Context mContext;

   public ReverseGeocodingTask(Context context){
       super();
       mContext = context;
   }

   // Finding address using reverse geocoding
   @Override
   protected String doInBackground(LatLng... params) {
       Geocoder geocoder = new Geocoder(mContext);
       double latitude = params[0].latitude;
       double longitude = params[0].longitude;

       List<Address> addresses = null;

       try {
           addresses = geocoder.getFromLocation(latitude, longitude,1);
       } catch (IOException e) {
           e.printStackTrace();
       }

       if(addresses != null && addresses.size() > 0 ){
           Address address = addresses.get(0);

           addressText = String.format("%s, %s, %s",
           address.getMaxAddressLineIndex() > 0 ? address.getAddressLine(0) : "",
           address.getLocality(),
           address.getCountryName());
       }

       return addressText;
   }
   @Override
   protected void onPostExecute(String addressResult) {
       // Setting the title for the marker.
       // This will be displayed on taping the marker

       snippet = addressResult;
       super.onPostExecute(snippet);
       //Toast.makeText(Show_full_map.this,addressText,Toast.LENGTH_LONG).show();
   }
}

1 个答案:

答案 0 :(得分:1)

我想你在调用snippet后立即想要execute。这不是AsyncTask的工作原理。您可以在location的构造函数中传递AsyncTask并从onPostExecute()访问它。 只需将以下代码从for循环移至onPostExecute()

即可
@Override
   protected void onPostExecute(String snippet) {
        super.onPostExecute(snippet);
        googlemap.addMarker(new MarkerOptions()
        .title(plat.get(j).toString())
        .snippet(snippet)
        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_CYAN))
        .position(location)
        );
}