【问题标题】:How do I parse through this firebase datastructure [closed]我如何解析这个firebase数据结构[关闭]
【发布时间】:2018-06-19 20:56:42
【问题描述】:

如何解析该数据库并获取所有双精度值。帮帮我

【问题讨论】:

  • 你是在使用node js在firebase中查询吗?
  • 在 android studio 中没有 java。

标签: android firebase firebase-realtime-database


【解决方案1】:

在您的情况下,使用 DRIVERID 之类的命名节点查询 firebase 将在获得对 DRIVERID 节点的引用后传递子名称。

firebaseRefTODRIVERID.child("Latlng").once("value", snap => {
      console.log(snap.val())
})

你可以查看这个answer

【讨论】:

  • 我是新手,所以我希望我能理解...我在 android studio 中使用 java...从我发现我应该做这样的事情..@987654325 @但显然罗盘值需要以不同的方式解析......我不知道如何
【解决方案2】:

假设DRIVERID 是您的 Firebase 根的直接子级,要获取这些值,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference yourRef = rootRef.child("DRIVERID").child("LatLng");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        double Lat = dataSnapshot.child("Lat").getValue(Double.class);
        double Lng = dataSnapshot.child("Lng").getValue(Double.class);
        Log.d("TAG", Lat + " / " + Lng);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
yourRef.addListenerForSingleValueEvent(eventListener);

输出将是:

22.582798 / 88.35998

要获取Compass,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference yourRef = rootRef.child("DRIVERID");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        double Compasss =  = dataSnapshot.child("Compasss").getValue(Double.class);
        double Lat = dataSnapshot.child("LatLng").child("Lat").getValue(Double.class);
        double Lng = dataSnapshot.child("LatLng").child("Lng").getValue(Double.class);
        Log.d("TAG", Compasss + " / " + Lat + " / " + Lng);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
yourRef.addListenerForSingleValueEvent(eventListener);

输出将是:

54.5750122070312 / 22.582798 / 88.35998

适用于 OP 的代码行是:

HashMap Compasss = (HashMap) dataSnapshot.getValue(Boolean.parseBoolean("Compasss"));

【讨论】:

  • 谢谢 alex ..这行得通.....指南针值呢??
  • 在此行出现错误com.google.firebase.database.DatabaseException: Failed to convert value of type java.lang.Double to StringString Lat = dataSnapshot.child("LatLng").child("Lat").getValue(String.class);
  • 请看我更新的答案。现在可以用了吗?
  • 我只记录同样为空的罗盘值....我正在运行您更新的代码
  • 对不起,我的错误。刚刚删除.child("LatLng")。请再看一遍。现在好了吗?
【解决方案3】:

我建议创建 2 个 Java 类:

  • 位置(双纬度,双倍Lng);
  • 驱动程序(字符串罗盘,位置 LatLng)

那么你就可以使用:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference().child("DRIVERID");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Driver driver = datasnapshot.getValue(Driver.class);
        //your data would be stored in this driver variable
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
rootRef.addListenerForSingleValueEvent(eventListener);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    相关资源
    最近更新 更多