【问题标题】:Update Marker from Firebase从 Firebase 更新标记
【发布时间】:2018-04-12 02:47:25
【问题描述】:

我正在开发一个地图应用程序。

此应用程序具有按钮,如果按下这些按钮,则会在地图上添加一个标记并添加到 Firebase 中的 LatLang。

我的 Firebase 结构如下:

Firebase

这是我的应用程序屏幕:

Application

拖动标记时我遇到了困难。我可以获取 LatLang,但无法将其发送到 Firebase,而且如果我在 Firebase 中更新某些数据,它不会在 App 中更新,只有在我关闭并再次打开 App 时才会更新。

我该怎么做?

@Override
        public void onMarkerDragEnd(Marker marker) {

            LatLng latLng = marker.getPosition();

            String id = marker.getId();

            Toast.makeText(getActivity(), ""+latLng+id, Toast.LENGTH_LONG).show();

            Marker previousMarker = mMarkerMap.get(marker.getId());

            if (previousMarker != null) {
                marker.remove();
                mMap.addMarker(new MarkerOptions().draggable(true).position(latLng).title("Buraco").icon(BitmapDescriptorFactory.fromResource(R.drawable.road)));
            } else {
                marker.remove();
                mDatabase.push().setValue(latLng);

            }

        }

        @Override
        public void onMarkerDragStart(Marker marker) {
            LatLng latLng = marker.getPosition();
        }

        @Override
        public void onMarkerDrag(Marker marker) {
            // TODO Auto-generated method stub
            LatLng latLng = marker.getPosition();
            marker.setPosition(latLng);
        }
    });

    GPS();

    mDatabase = FirebaseDatabase.getInstance().getReference().child("Locais").child("Buraco");

    mDatabase.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) {
            LatLng location = new LatLng(
                    dataSnapshot.child("latitude").getValue(double.class),
                    dataSnapshot.child("longitude").getValue(double.class)

            );
            mMap.addMarker(new MarkerOptions().draggable(true).position(location).title("Buraco").icon(BitmapDescriptorFactory.fromResource(R.drawable.road)));
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String prevChildKey) {
        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {
        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String prevChildKey) {
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

【问题讨论】:

    标签: java android google-maps firebase firebase-realtime-database


    【解决方案1】:

    您目前只提交onChildAdded,它会触发:

    1. 最初用于非常现有的子节点。
    2. 每当添加新的子节点时。

    如果您更新现有节点,则这些都不正确,onChildAdded 不会触发。相反,onChildChanged 会触发这样的更新,所以你必须实现它,读取纬度和经度,并更新标记。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-04
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 2017-11-04
      • 1970-01-01
      • 2020-04-19
      • 1970-01-01
      相关资源
      最近更新 更多