Java Firebase数据库数据收集

Java Firebase数据库数据收集,java,android,firebase,firebase-realtime-database,reference,Java,Android,Firebase,Firebase Realtime Database,Reference,我正在为我的项目使用Firebase数据库。在过去的几天里,我试图从数据库中检索数据,但运气不佳。我尝试了许多来自Stack的教程和问题。。数据库如下所示: 数据库结构 我的用户类 我想检索信息并将其存储在其中一个字符串中 我的代码是: 每次我收到空值或错误时。我不确定我是否使用了正确的引用(“用户”) 有没有简单的方法检索用户名并将其存储到字符串中?谢谢首先,您必须做以下声明: private DatabaseReference mUserDatabase; private Fireb

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

数据库结构

我的用户类

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

我的代码是:

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


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

首先,您必须做以下声明:

private DatabaseReference mUserDatabase;
private FirebaseUser mCurrentUser;
在onCreate中,您需要使smth如下所示:

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”中有了用户名

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

示例:name->uName 姓氏->惯用名

然后


首先,数据库中的字段名称必须与模型类中的字段名称相同。看看你们的模型课,你们需要做一些事情。因此,我将提供一种正确的方法来为您的类建模

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);

在我的一篇文章中,我已经一步一步地解释了在使用Firebase时如何使用模型类。

请将指向代码和JSON图片的链接替换为实际文本。在JSON的情况下,你可以通过点击你的页面中的“导出JSON”链接来获得这个信息。请不要显示代码的图片。如果您将代码复制到问题中,并使用代码块格式化,则会更容易。不幸的是,在实现上述代码后,我在空对象引用上获得了java.lang.String java.lang.Object.toString()。此代码对我适用。你能在实现后给我看一下你的代码吗?谢谢!我去看看。我会更新结果,等待您的回复。谢谢您,先生!成功了。现在我可以将数据存储到字符串中了!祝您今天过得愉快!
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);