【问题标题】:Not really understanding retrieving marker location from Firebase Database不太了解从 Firebase 数据库中检索标记位置
【发布时间】:2019-06-16 11:51:01
【问题描述】:

我寻找答案并尝试了很多教程,但我仍然无法正确解决。我正在开发一个应用程序,用户可以在其中向地图添加标记,并且所有其他用户都会看到标记.但我无法让它工作,因为数据库中的标记从不显示。

这是我从数据库读取的代码:

mLocation.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                MarkerLocation markerLocation = dataSnapshot.child("location").getValue(MarkerLocation.class);
                for (DataSnapshot s : dataSnapshot.getChildren()){
                double latitude = (double) (s.child("lat").getValue());
                double longitude = (double) ((s.child("lng").getValue()));
                LatLng location = new LatLng(latitude,longitude);
                mMap.addMarker(new MarkerOptions().position(location));
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

firebase 数据库如下所示:

  • 应用

      -location
            -marker
                 -latitude:43.849
                 -longitude:-109.737
    

任何帮助appriciated。

【问题讨论】:

  • 问题解决了吗?如果没有,请添加您的数据库结构的屏幕截图。
  • 我需要 10 个代表来上传 aj 图片 :D 而我没有那个
  • 使用imgbb.com并提供链接。

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


【解决方案1】:

试试这个:

@Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                MarkerLocation markerLocation = dataSnapshot.child("location").getValue(MarkerLocation.class);
                LatLng location = new LatLng(markerLocation.latitude, markerLocation.longitude);
                mMap.addMarker(new MarkerOptions().position(location));

                }
            }

【讨论】:

  • 不抱歉。但我改变了它,因为我尝试了一些不同的东西,后来忘记把它改回来,但即使正确,它仍然不显示标记
【解决方案2】:

要根据您的实际架构将数据库中的所有标记添加到地图上,请使用以下代码行:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference locationRef = rootRef.child("location");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            MarkerLocation markerLocation = ds.getValue(MarkerLocation.class);
            LatLng latLng = new LatLng(markerLocation.getLatitude(), markerLocation.getLongitude());
            mMap.addMarker(new MarkerOptions().position(latLng));
            Log.d(TAG, markerLocation.getLatitude() + ", " +  markerLocation.getLongitude());
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
locationRef.addListenerForSingleValueEvent(valueEventListener);

如果您将值直接设置到公共字段,请更改以下代码行:

LatLng latLng = new LatLng(markerLocation.getLatitude(), markerLocation.getLongitude());

LatLng latLng = new LatLng(markerLocation.latitude, markerLocation.longitude);

【讨论】:

  • 你有错误还是什么?什么是行为?我编辑的答案中的日志语句是否打印了一些东西?
  • 地图正常启动,一切正常,只有标记没有显示在地图上......我得到的错误出现在这些屏幕截图中ibb.co/wMPrDjgibb.co/ZHwW7xx
  • 我看不到任何异常。请告诉我,我编辑的答案中的日志语句 Log.d(TAG, markerLocation.getLatitude() + ", " + markerLocation.getLongitude()); 是否在 logcat 中打印了一些内容?
  • 不,我不这么认为,找不到类似的东西,但有更新......我们现在显示来自数据库的标记,但它们都出现在地图上的同一个位置,但是没有标记具有该点的纬度。有任何想法吗?很抱歉没有让它变得容易,但我对整个 java 的事情还是很陌生。
  • 让我们一次只回答一个问题。你说我不认为......所以一定要看看logcat。数据库中的坐标是否显示在 logcat 中?如果不帮我,我帮不了你。
【解决方案3】:

如果您的配置正确,您应该能够显示标记:

LatLng loc = new LatLng(-33.852, 151.211);
googleMap.addMarker(new MarkerOptions().position(loc)
            .title("Marker"));

另外,如果您的 firebase 数据结构是您之前发布的数据结构,请查看键:您正在使用

double latitude = (double) (s.child("lat").getValue());
double longitude = (double) ((s.child("lng").getValue()));

但应该是:

double latitude = (double) (s.child("latitude").getValue());
double longitude = (double) ((s.child("longitude").getValue()));

【讨论】:

    【解决方案4】:

    也许您没有获得更新,因为您正在使用 addListenerForSingleValueEvent API,该 API 将对数据库节点进行 1 次查询。如果您想连接一个侦听器,以便在节点更改时每次接收更新,那么您需要使用 addValueEventListener API。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-23
      相关资源
      最近更新 更多