完成AsyncTask onPostExecute之后如何在MainActivity中执行操作

问题描述 投票:0回答:1

我正在尝试获取LatLngs,以便能找到搜索结果的最近位置,我正在尝试这种方式,但是getLatLngs返回null,因为它尚未初始化。如何在MainActivity中访问内容onPostExecute已完成。谢谢您。

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

}

在MainActivity中

getNearbyPlaces.execute(transferData).get();
nearestDistance = getNearbyPlaces.getShortestLatLng();
android-studio android-asynctask google-places-api
1个回答
0
投票

在调用方法之前,您必须初始化LatLngs字段。

© www.soinside.com 2019 - 2024. All rights reserved.