【问题标题】:Firebase Database data collectionFirebase 数据库数据收集
【发布时间】:2018-02-22 00:21:50
【问题描述】:

我正在为我的项目使用 Firebase 数据库。在过去的几天里,我试图从数据库中检索数据,但没有运气。我尝试了 Stack 中的许多教程和问题。数据库如下所示:

数据库结构

我的用户类

我想检索信息并将其存储在其中一个字符串中..

我的代码是:

每次我收到 Null 值或错误时。我不确定我是否使用了正确的参考(“用户”)。

是否有简单的方法来检索用户名并将其存储到字符串中?谢谢

【问题讨论】:

  • 请将代码和JSON图片的链接替换为实际文本。对于 JSON,您可以通过单击 Firebase Database console 中的“导出 JSON”链接来获取此信息。
  • 请不要显示代码图片。如果您将代码复制到您的问题中并使用代码块格式化它会容易得多。

标签: java android firebase firebase-realtime-database reference


【解决方案1】:

首先,您的数据库中的字段名称需要与模型类中的名称相同。看着你的模型课,你需要做一些事情。所以,我会提供一个正确的方法来为你的类建模。

public class UserModelClass {
    private String name, sureName, date, phoneNumber;

    public UserModelClass() {}

    public UserModelClass(String name, String sureName, String date, String phoneNumber) {
        this.name = name;
        this.sureName = sureName;
        this.date = date;
        this.phoneNumber = phoneNumber;
    }

    public String getName() {return name;}

    public String getSureName() {return sureName;}

    public String getDate() {return date;}

    public String getPhoneNumber() {return phoneNumber;}
}

为了使其正常工作,您需要从数据库中删除所有数据并添加新数据。将用户存储在 Firebase 数据库中时,有一种解决方法。而不是使用push() 方法提供的随机密钥,而是使用uid。为此,我建议您按照以下代码行添加数据:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
UserModelClass umc = new UserModelClass("Jonas", "Simonaitis", "today", "123456789");
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("users").child(uid);
uidRef.setValue(umc);

要读取数据,请使用以下代码:

ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        UserModelClass userModelClass = dataSnapshot.getValue(dataSnapshot.class);
        String name = userModelClass.getName();
        String sureName = userModelClass.getSureName();
        String date = userModelClass.getDate();
        String phoneNumber = userModelClass.getPhoneNumber();
    }

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

在我的tutorials 之一中,我已经逐步解释了在使用 Firebase 时如何使用模型类。

【讨论】:

  • 谢谢!我会看一看。我会更新结果
  • 好的,等待您的回复。
  • 谢谢先生!有效。现在我可以将数据存储到字符串中!祝你有美好的一天!
【解决方案2】:

首先你必须做这些声明:

private DatabaseReference mUserDatabase;
private FirebaseUser mCurrentUser;

在 onCreate 中你需要像这样:

mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
String current_uid = mCurrentUser.getUid();

mUserDatabase =FirebaseDatabase.getInstance().getReference().child("Users")        
.child(current_uid);

mUserDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            String name = dataSnapshot.child("uName").getValue().toString();

}

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

现在你在“name”中有了用户名

【讨论】:

  • 不幸的是,在实现上面提供的代码后,我在空对象引用上得到了 java.lang.String java.lang.Object.toString()'。
  • 这段代码对我有用。你能在实现后给我看你的代码吗?
【解决方案3】:

首先更改 userInformationActivity 类变量名称以匹配数据库中的名称

示例:名称 -> uName 姓 -> uSurname

然后

private void showData(DataSnapshot dataSnapshot){

   for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
       userInformationActivity user = dataSnapshot.getValue(userInformationActivity.class);
       Log.d("user Name is : " + user.uName);
    }

} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    相关资源
    最近更新 更多