我在Firebase中存储了一组坐标,我想将这些坐标带到我的Android项目中,并将它们设置在地图上作为标记,并在它们之间绘制直线。 这是我的onMapReady代码:
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
LatLng sydney = new LatLng(34.505688, 36.5946491);
//mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 16));
new MyAsyncTask().execute();}
在MyAsycTask中有以下代码:
private class MyAsyncTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
gettingCoordinates();
return null;
}
@Override
protected void onPostExecute(Void result) {
drawPath();
}
}
存在MyAsycTask中使用的两种方法:
public void gettingCoordinates(){
fireget.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
HashMap<String,String> value=new HashMap<>();
value=(HashMap<String,String>)dataSnapshot.getValue();
Lan=Double.parseDouble(value.get("Latitude"));
Long=Double.parseDouble(value.get("Longitude"));
points.add(i,new LatLng(Lan,Long));
i++;
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
在那里:
public void drawPath(){
for (LatLng point : points) {
mMap.addMarker(new MarkerOptions()
.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker))
.anchor(0.2f, 1.0f)
.position(point));
PolylineOptions rectOptions = new PolylineOptions()
.width(5)
.color(Color.RED)
.add(point);
polyline = mMap.addPolyline(rectOptions);
polyline.setPoints(points);
}
}
所以我的问题是:当我运行代码时,它首先执行drawPath方法,然后去执行gettingCoordinates方法 有我的firebase结构: https://i.stack.imgur.com/9CbYY.png 我希望你能帮助我。