Android studio 如何在AsyncTask onPostExecute完成后在MainActivity中执行某些操作
我正在尝试获取LatLngs,以便找到搜索结果的最近位置,我正在尝试这种方式,但getLatLngs返回null,因为它尚未初始化。在onPostExecute完成后,如何从MainActivity访问内容。请提前感谢Android studio 如何在AsyncTask onPostExecute完成后在MainActivity中执行某些操作,android-studio,android-asynctask,google-places-api,Android Studio,Android Asynctask,Google Places Api,我正在尝试获取LatLngs,以便找到搜索结果的最近位置,我正在尝试这种方式,但getLatLngs返回null,因为它尚未初始化。在onPostExecute完成后,如何从MainActivity访问内容。请提前感谢 public class GetNearbyPlaces extends AsyncTask<Object, String, String> { private ArrayList<LatLng> LatLngs = new ArrayL
public class GetNearbyPlaces extends AsyncTask<Object, String, String> {
private ArrayList<LatLng> LatLngs = new ArrayList<>();
private LatLng latLngMain;
private LatLng shortestLatLng;
@Override
protected void onPostExecute(String s) {
List<HashMap<String, String>> nearbyPlacesList = null;
DataParser dataParser = new DataParser();
nearbyPlacesList = dataParser.parse(s);
shortestLatLng = DisplayNearbyPlaces(nearbyPlacesList);
}
private LatLng DisplayNearbyPlaces(List<HashMap<String, String>> nearbyPlacesList)
{
int index = 0;
LatLng shortest;
double shortestDistance = Double.MAX_VALUE;
for(int i = 0;i<nearbyPlacesList.size();i++)
{
MarkerOptions markerOptions = new MarkerOptions();
HashMap<String, String> googleNearbyPlace = nearbyPlacesList.get(i);
String nameOfPlace = googleNearbyPlace.get("place_name");
String vicinity = googleNearbyPlace.get("vicinity");
double lat = Double.parseDouble(googleNearbyPlace.get("lat"));
double lng = Double.parseDouble(googleNearbyPlace.get("lng"));
LatLng latLng = new LatLng(lat,lng);
LatLngs.add(latLng);
markerOptions.position(latLng);
markerOptions.title(nameOfPlace + " : " + vicinity);
markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
if(mMap!=null)
mMap.addMarker(markerOptions);
}
for(int i = 0;i<LatLngs.size();i++)
{
double deltaLat = latLngMain.latitude - LatLngs.get(i).latitude;
double deltaLng = latLngMain.longitude - LatLngs.get(i).longitude;
double distanceInDegree = Math.sqrt(deltaLat * deltaLat + deltaLng * deltaLng);
double distanceInMeter = distanceInDegree * 4000;
if(distanceInMeter<shortestDistance)
{
shortestDistance=distanceInMeter;
index = i;
}
}
shortest = LatLngs.get(index);
return shortest;
}
public LatLng getShortestLatLng()
{
return shortestLatLng;
}
}
在调用LatLngs字段上的方法之前,必须初始化该字段 替换
private ArrayList<LatLng> LatLngs;
private ArrayList LatLngs;
到
private ArrayList LatLngs=new ArrayList();
在代码中,仅在DisplayNearbyPlaces方法的循环中初始化它,例如,
nearbyPlacesList为空,则此循环的主体不运行,字段保持未初始化状态。我这样做了,但现在Arraylist为空,java.lang.IndexOutOfBoundsException:索引:0,大小:0
private ArrayList<LatLng> LatLngs;
private ArrayList<LatLng> LatLngs = new ArrayList<>();