使用唯一键迭代Firebase Data Android

时间:2017-12-01 01:22:37

标签: android firebase firebase-realtime-database

使用具有简单数据结构的Firebase,我不知道如何读取包含唯一键的数据。密钥使用以下方式生成:

String key = myRef.child("users").push().getKey();

并添加我的数据可以正常使用:

myRef.child("users").child(userID).child("favorites").child(key).setValue(newSite);

我的数据结构简单:

Users
 - UserID
  - Favorites
   - KEY : VALUE

我能够看到我的数据,如showData(dataSnapshot):

for(DataSnapshot ds : dataSnapshot.getChildren()){
   String data = ds.child(userID).child("favorites").getValue().toString();
   Log.v("DATA", "DATA: " + data);
}

数据返回:例如{-L-DpQQCX8GYKPWclOX4=test}。我们是否要迭代返回的对象?或者我是否对Firebase做错了,应该以某种方式得到每个值?如果有相关文档,请分享链接。我没有找到随机密钥。

编辑:::

我的听众是:

 myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            showData(dataSnapshot);
        }

        @Override
        public void onCancelled(DatabaseError error) {
            // Failed to read value
            Log.w(TAG, "Failed to read value.", error.toException());
        }
    });

我能够通过解析对象来查看关键数据:

JSONObject json = null;
            try {
                json = new JSONObject(data);
            } catch (JSONException e) {
                e.printStackTrace();
            }

            for(Iterator<String> iter = json.keys();iter.hasNext();) {
                String key = iter.next();
                Log.e("KEY",key);
                array.add(key);
            }

1 个答案:

答案 0 :(得分:0)

要从Firebase数据库获取数据,您无需使用JSONObject。你可以简单地附加一个监听器并使用dataSnapshot遍历getChildren()对象,如下所示:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference favoritesRef = rootRef.child("users").child(userID).child("favorites");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String key = ds.getKey();
            String value = ds.getValue(String.class);
            Log.d("TAG", key + value);
        }
    }

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

使用此代码,您可以从favorites位置获取所有键和值。