在onother完成Android中的数据替换后如何运行函数/方法

我有一个GPS应用程序,可在其中提取用户的位置,然后提取他当前所在的城市和国家/地区名称。我使用此代码来确定它:

    public void getLocality() {

    geocoder = new Geocoder(context);
    try {
        List<Address> addressList = geocoder.getFromLocation(lat,lng,1);
        country = addressList.get(0).getcountryName();
        locality = addressList.get(0).getLocality();
        Log.wtf("Location is ",locality + " in " + country);

    } catch (IOException e) {
        e.printStackTrace();
    }

}

在填写国家和城市变量之后,我想使用此功能在谷歌地图上设置标记,

        public void getchargersFromDatabase() {

       db.collection("chargers")
         //      .whereEqualTo("country",country)
                .get()
                .addOnCompleteListener(new OnCompleteListener<Querysnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<Querysnapshot> task) {
                        if (task.isSuccessful()) {
                            MarkerOptions chargers = new MarkerOptions();

                            for (QueryDocumentsnapshot document : task.getResult()) {
                                Log.d(TAG,document.getId() + " => " + document.getData());
                                GeoPoint charger = document.getGeoPoint("geopoint");

                                String name = document.getString("name");
                                String status = document.getString("status");

                                double lat = charger.getLatitude();
                                double lng = charger.getLongitude();
                                LatLng latLng = new LatLng(lat,lng);

                                if(status.equals("ready")) {
                                    chargers.icon(BitmapDescriptorFactory.fromResource(R.drawable.thundergreen));
                                    chargers.anchor(0.5f,0.5f);                          
                                }
                                if(status.equals("in use")) {
                                   chargers.icon(BitmapDescriptorFactory.fromResource(R.drawable.thunderred));
                                    chargers.anchor(0.5f,0.5f);
                                }

                                chargers.position(latLng);
                                chargers.title(name);

                                map.addMarker(chargers);
                        }
                    } else {
                           public void getchargersFromDatabase() {


        LatLngBounds curScreen = map.getProjection()
                .getVisibleRegion().latLngBounds;

        Log.wtf("LATLONG BOUNDS",curScreen.toString());

        Log.wtf("getchargers","Function called");

       db.collection("chargers")
               .whereEqualTo("country",country)
                .get()
                .addOnCompleteListener(new OnCompleteListener<Querysnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<Querysnapshot> task) {
                        if (task.isSuccessful()) {
                            MarkerOptions chargers = new MarkerOptions();

                            Log.wtf("getchargers","Task completed");
                            Log.wtf("getchargers",country);

                            for (QueryDocumentsnapshot document : task.getResult()) {
                                Log.d(TAG,document.getId() + " => " + document.getData());
                                GeoPoint charger = document.getGeoPoint("geopoint");

                                String name = document.getString("name");
                                String status = document.getString("status");

                                Log.wtf("status",status);

                                double lat = charger.getLatitude();
                                double lng = charger.getLongitude();
                                LatLng latLng = new LatLng(lat,0.5f);
                                    Log.wtf("getchargers","if it is ready");
                                }

                                if(status.equals("in use")) {
                                    chargers.icon(BitmapDescriptorFactory.fromResource(R.drawable.thunderred));
                                    chargers.anchor(0.5f,0.5f);
                                }

                                chargers.position(latLng);
                                chargers.title(name);

                                map.addMarker(chargers);
                        }
                    } else {
                        Log.d(TAG,"Error getting documents: ",task.getException());
                    }
                }
    });

  }
}

如何确保在getLocality()完成并填充变量counrty和city之后,应调用设置标记的函数。

anlijinhuawei 回答:在onother完成Android中的数据替换后如何运行函数/方法

我认为我已经使用AsyncTask(如提到的@Swayangjit)解决了它。我使用了这段代码:

private class getLocalityTask extends AsyncTask<Void,Void,String> {
    @Override
    protected String doInBackground(Void... voids) {

        getLocality();
        return country;
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        getChargersFromDatabase();
    }
}
本文链接:https://www.f2er.com/3165293.html

大家都在问