java - 如何在 Android 中迭代 Firebase 结构?

标签 java android json firebase

我想创建一个迭代 firebase 结构的函数,如下所示:

{
   "users":{
      "7e122736-2dd4-4770-a360-a0e7cbe41a43":{
         "currentLatitude":46.6598714,
         "currentLongitude":23.5637339,
         "displayName":"gjsj2",
         "email":"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8ab8cafce6ebeea4e9e5e7" rel="noreferrer noopener nofollow">[email protected]</a>",
         "password":"123"
      },
      "a09e7e1d-ad3a-4d21-b0ba-069e0999bb93":{
         "currentLatitude":47.6599014,
         "currentLongitude":23.5636797,
         "displayName":"gjsj",
         "email":"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="704130061c11145e131f1d" rel="noreferrer noopener nofollow">[email protected]</a>",
         "password":"123"
      },
      "abc29286-fd6d-4088-95da-759828b5835d":{
         "currentLatitude":50.6599043,
         "currentLongitude":23525.5637188,
         "displayName":"gjsj3",
         "email":"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="427102342e23266c212d2f" rel="noreferrer noopener nofollow">[email protected]</a>",
         "password":"123"
      }
   }
}

我想创建一个函数,获取每个唯一用户 ID 的子代,并使用他的坐标在谷歌地图上创建标记。这是我到目前为止所得到的,但它似乎不起作用:

public void onChildChanged(DataSnapshot snapshot, String s) {
    for (DataSnapshot userSnapshot : snapshot.getChildren()) {
        for (DataSnapshot uniqueUserSnapshot : userSnapshot.getChildren()) {
            Users currentUser = uniqueUserSnapshot.getValue(Users.class);

            MarkerOptions options = new MarkerOptions()
                    .title(currentUser.getEmail())
                    .icon(BitmapDescriptorFactory.defaultMarker(getRandomNumberInRange(0, 360)))
                    .position(new LatLng(currentUser.getCurrentLatitude(), currentUser.getCurrentLongitude()));
            mMap.addMarker(options);
            Toast.makeText(MainActivity.this, "fsafasfasfas", Toast.LENGTH_SHORT).show();
        }
    }
}

这是我的用户 POJO:

package com.licenta.vladut.mmap;

public class Users {
    String email;
    String displayName;
    String password;
    double currentLatitude;
    double currentLongitude;


    public Users() {
    }

    public Users(String email, String displayName, String password, double currentLongitude, double currentLatitude) {
        this.email = email;
        this.displayName = displayName;
        this.password = password;
        this.currentLongitude = currentLongitude;
        this.currentLatitude = currentLatitude;
    }

    public Users(String email, String displayName, String password) {
        this.email = email;
        this.displayName = displayName;
        this.password = password;
    }

    public String getDisplayName() {
        return displayName;
    }

    public String getEmail() {
        return email;
    }

    public String getPassword() {
        return password;
    }

    public double getCurrentLongitude() {
        return currentLongitude;
    }

    public double getCurrentLatitude() {
        return currentLatitude;
    }
}

最佳答案

如果我正确理解了这个问题,那么您实际上已经接近您想做的事情了。引用数据库子用户,然后添加ValueEventListener:

Firebase userRef = new Firebase(/*url*/);
userRef = userRef.child("users");
userRef.addValueEventListener(new ValueEventListener(){
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot uniqueUserSnapshot : dataSnapshot.getChildren()) {
            ...
        }
    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {

    }
});

ValueEventListener 返回被调用的节点,而不是一一返回子节点。

关于java - 如何在 Android 中迭代 Firebase 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37820129/

相关文章:

javascript - 将图像附加到 dhtmlx 窗口

java - 如何制作类似 MIUI 的标签页

java - Java中的蛮力多项式算法

c# - ZXing 条码扫描仪 NullReferenceException 与 Xamarin (Visual Studio)

Android WiFi 设备到 AP 的往返时间 (RTT)

ios - 正在获取链接中带有 %20 的 JSON

java - Gson - 从 Json 转换为类型化的 ArrayList<T>

java - 将java类实例从javascript(通过ajax)发送到jsp或servlet

java - 关于深度复制和序列化

java - 如何将 .cpp C++ native 库导入 Android Studio