繁体   English   中英

从 Firebase 实时数据库中为特定用户读取数据

[英]Reading data from Firebase Realtime Database for a specific user

从 Firebase 实时数据库读取数据的正确方法是什么? 我创建了一个包含子账单的数据库“Mybill”。 在子账单中,我从 FirebaseAuth 中保存 UserId,因此应该很容易找到特定用户的账单,在 userID 子中,我有一个使用 .push() 方法创建的子,其中我有关于账单。

它看起来像这样:

在此处输入图像描述

我应该如何更改我的 Java 代码,以便我可以获得为特定用户(当前登录的用户)保存的所有账单,这是我现在的代码:

final FirebaseDatabase database = FirebaseDatabase.getInstance();
       DatabaseReference ref = database.getReference("bills");
       Query checkUser = ref.orderByChild("UserId").equalTo(Autentication.GetUser());

       // Attach a listener to read the data at our posts reference
       checkUser.addListenerForSingleValueEvent(new ValueEventListener() {
           @Override
           public void onDataChange(DataSnapshot dataSnapshot) {

               String email = dataSnapshot.child("email").getValue(String.class);
               String market = dataSnapshot.child("market").getValue(String.class);
               String price = dataSnapshot.child("price").getValue(String.class);
               String date = dataSnapshot.child("date").getValue(String.class);

           }

           @Override
           public void onCancelled(DatabaseError databaseError) {
               System.out.println("The read failed: " + databaseError.getCode());
           }
       });
  • 我应该如何更改我的 Java 代码,以便我可以获得为特定用户(当前登录的用户)保存的所有账单

为此,请使用以下代码行:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("bills").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String email = ds .child("email").getValue(String.class);
            String market = ds .child("market").getValue(String.class);
            String price = ds .child("price").getValue(String.class);
            Log.d("TAG", email + "/" + market + "/" + price);
        }
    }

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

“日期”不能作为字符串读取,因为它是 object。 因此,最合适的方式是将其读取为 Map<String, Object>。 通过这种方式,您只能获得与特定用户(登录用户)相对应的账单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM