【问题标题】:Retrieve data from firebase and create marker从 firebase 检索数据并创建标记
【发布时间】:2019-07-11 15:41:23
【问题描述】:

我想问一下如何从firebase中检索数据以获取特定数据。 我的 firebase 数据库看起来像这样。。 我想检索圈子中的数据。

完整的 firebase 将如下所示。

我尝试的是使用 datasnapshot 和 value eventlistener 从 firebase 调用数据。

private void getMarkerFromDb()
    {
        String userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
        DatabaseReference dataMarker = FirebaseDatabase.getInstance().getReference();

        if (getIntent()!=null) {

            lrpTest = (LRP_model) getIntent().getSerializableExtra("lrp");

            DatabaseReference routeRef = dataMarker.child("LRP")
                    .child(userId)
                    .child("route_models");
            routeRef.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for (int counter =0; counter<dataSnapshot.getChildrenCount();counter++) {
                        for (DataSnapshot ss : dataSnapshot.child("route_models").getChildren()) {
                            double latitude = ss.child("rtLat").getValue(Double.class);
                            double longitude = ss.child("rtLng").getValue(Double.class);
                            LatLng loc = new LatLng(latitude, longitude);
                            mMap.addMarker(new MarkerOptions().position(loc).title("test")).setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ic_action_pole));
                        }
                    }
                }

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

                }
            });
        }
    }

输出没有显示任何内容。

【问题讨论】:

  • 请上传数据库图片
  • 添加了firebase的图片
  • 使用 Double.parseDouble(strvalue) 获取双精度值
  • 我该如何使用它,因为在此之前仍然有错误
  • 无法将 java.lang.String 类型的值转换为 double。就是这么说的。

标签: java android firebase firebase-realtime-database


【解决方案1】:

改变这个:

            routeRef.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for (int counter =0; counter<dataSnapshot.getChildrenCount();counter++) {
                        for (DataSnapshot ss : dataSnapshot.child("route_models").getChildren()) {
                            double latitude = ss.child("rtLat").getValue(Double.class);
                            double longitude = ss.child("rtLng").getValue(Double.class);
                            LatLng loc = new LatLng(latitude, longitude);
                            mMap.addMarker(new MarkerOptions().position(loc).title("test")).setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ic_action_pole));
                        }
                    }
                }

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

                }
            });

进入这个:


            DatabaseReference routeRef = dataMarker.child("LRP")
                    .child(userId);

            routeRef.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        for (DataSnapshot ss : dataSnapshot.getChildren()) {
                            for (DataSnapshot datas : ss.child("route_models").getChildren()) {
                            double latitude = datas.child("rtLat").getValue(Double.class);
                            double longitude = datas.child("rtLng").getValue(Double.class);
                            LatLng loc = new LatLng(latitude, longitude);
                            mMap.addMarker(new MarkerOptions().position(loc).title("test")).setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ic_action_pole));
                          }
                        }
                    }
                }

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

                }
            });

更改对节点userId 的引用,然后在其中迭代两次以访问route_models 属性。

【讨论】:

  • 好的,去掉 for 循环,只记录数据快照:Log.d(TAG, dataSnapshot); 也记录userId
  • D/MapActivity: DataSnapshot { key = NwyIA1AVOnMA8ZK46CNeVR1sVnd2, value = null }data
  • 2019-07-11 16:35:54.620 13377-13377/com.example.application.distriulam D/MapActivity: NwyIA1AVOnMA8ZK46CNeVR1sVnd2 userId
  • 如果你改变你对这个DatabaseReference routeRef = dataMarker.child("LRP") .child(userId) .child("-LeoD6JYtBj9dEV71AX9");的引用并像以前一样登录Log.d(TAG, dataSnapshot);并告诉我你得到了什么
  • 它在日志中列出来自 firebase 的数据。
猜你喜欢
  • 2016-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-16
  • 1970-01-01
  • 2019-08-11
相关资源
最近更新 更多