从Firebase检索坐标并将其绘制在地图上

时间:2019-03-02 10:08:47

标签: android firebase firebase-realtime-database

我在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 我希望你能帮助我。

0 个答案:

没有答案