【发布时间】:2019-11-04 16:18:22
【问题描述】:
我有一个 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();
}
}
变量 country 和 city 被填充后,我想用这个已经有效的功能在谷歌地图上设置标记:
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, lng);
if(status.equals("ready")) {
chargers.icon(BitmapDescriptorFactory.fromResource(R.drawable.thundergreen));
chargers.anchor(0.5f,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() 完成并填充变量国家和城市之后,应该调用设置标记的函数。
【问题讨论】:
-
看来你没有使用AsyncTask你可以在getLocality之后调用getChargersFromDatabase
-
谢谢,但我该怎么做呢?
-
能否提供完整的课程,让我看看
-
我想我找到了!
标签: android android-asynctask google-cloud-firestore task