Java Firebase数据库数据快照不工作

Java Firebase数据库数据快照不工作,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正试图根据登录用户的性别向其显示欢迎消息。如果是“男性”,则setText(“您好,先生,您的邮件是:”+user.getEmail()),否则,setText(“您好,女士,您的邮件是:”+user.getEmail())。这是我的数据库结构: 这是我正在处理的java概要文件活动: import android.os.Bundle; import android.view.View; import android.widget.TextView; import android.suppo

我正试图根据登录用户的性别向其显示欢迎消息。如果是“男性”,则
setText(“您好,先生,您的邮件是:”+user.getEmail())
,否则,
setText(“您好,女士,您的邮件是:”+user.getEmail())
。这是我的数据库结构:

这是我正在处理的java概要文件活动:

import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.support.v7.app.AppCompatActivity;
import com.firebase.client.DataSnapshot;
import com.firebase.client.Firebase;
import com.firebase.client.FirebaseError;
import com.firebase.client.ValueEventListener;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

public class ProfileActivity extends AppCompatActivity {
    TextView textViewUserEmail;

    private FirebaseDatabase mFirebaseDatabase;
    private FirebaseAuth mAuth;
    public DatabaseReference myRef;
    public String userID;

    @Override
    protected void onCreate(Bundle saveInstanceState) {
        super.onCreate(saveInstanceState);
        setContentView(R.layout.activity_profile);

        mAuth = FirebaseAuth.getInstance();
        Firebase.setAndroidContext(this);
        mFirebaseDatabase = FirebaseDatabase.getInstance();
        myRef = mFirebaseDatabase.getReference();
        final FirebaseUser user = mAuth.getCurrentUser();
        userID = user.getUid();
        DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("UsersMale");

        textViewUserEmail = (TextView) findViewById(R.id.textViewUserEmail);
        loadUserInformation();

        ref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String myStrign = dataSnapshot.getValue(String.class);
                if (user.isEmailVerified() && myStrign.equals("male")) {
                    textViewUserEmail.setText("Hello Sir, your mail is: " + user.getEmail());
                } else {
                    textViewUserEmail.setText("Hello Madam, your mail is: " + user.getEmail());
                }
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {}
        });
    }

}
}

代码返回了一个错误。你能告诉我我做错了什么吗?提前感谢。

将数据库结构更改为:

 users
   uniqueId
        name: superman
        gender: male
   uniqueId
        name: girl
        gender: female
不需要有两个父节点
UserMale
UserFemale
,只需创建一个节点调用它
users
,每个用户都有一个属性gender

然后这样做:

FirebaseUser user = mAuth.getCurrentUser();
String userID = user.getUid();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users");

ref.child(userID).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            String gender=dataSnapshot.child("gender").getValue().toString();
            if(gender.equals("male")) {
                textViewUserEmail.setText("Hello Sir, your mail is: " + user.getEmail());
            } else {
                textViewUserEmail.setText("Hello Madam, your mail is: " + user.getEmail());
            }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {}
    });
}

首先检索用户ID,然后将位置放在
users
,然后附加一个侦听器并检索登录用户的性别值

将数据库结构更改为:

 users
   uniqueId
        name: superman
        gender: male
   uniqueId
        name: girl
        gender: female
不需要有两个父节点
UserMale
UserFemale
,只需创建一个节点调用它
users
,每个用户都有一个属性gender

然后这样做:

FirebaseUser user = mAuth.getCurrentUser();
String userID = user.getUid();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users");

ref.child(userID).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            String gender=dataSnapshot.child("gender").getValue().toString();
            if(gender.equals("male")) {
                textViewUserEmail.setText("Hello Sir, your mail is: " + user.getEmail());
            } else {
                textViewUserEmail.setText("Hello Madam, your mail is: " + user.getEmail());
            }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {}
    });
}

首先检索用户ID,然后将位置放在
users
,然后附加一个侦听器并检索登录用户的性别值

之所以会发生这种情况,是因为当您将对象解析为字符串时,查询会返回该对象<代码>字符串myStrign=dataSnapshot.getValue(String.class)。您需要定义一个可以转换返回的快照的POJO。谢谢您的回答。你能举例说明答案吗@M.WaqasPervezAlso您的firebase结构中没有任何节点具有key
Users
。您只是假设了用户的性别吗?哦!是的,那是个错误@M.waqaspervezt之所以发生这种情况,是因为当您将对象解析为字符串时,查询返回一个对象<代码>字符串myStrign=dataSnapshot.getValue(String.class)。您需要定义一个可以转换返回的快照的POJO。谢谢您的回答。你能举例说明答案吗@M.WaqasPervezAlso您的firebase结构中没有任何节点具有key
Users
。您只是假设了用户的性别吗?哦!是的,那是个错误@M.WaqasPervezOkay,我在导入
com.google.firebase.database.ValueEventListener
时遇到问题,但在解决了这个问题之后,现在它说,
类“从ValueEventListener派生的匿名类”必须声明为抽象的,或者在“ValueEventListener”中的“onDataChange(DataSnapshot)”上实现抽象方法。
。这里可能有什么问题?@Ashonko ValueEventListener是一个接口,当您实现一个接口时,您必须覆盖它的所有方法。只要让android studio自动完成它。。。当您编写新的ValueEventListener时,它应该自动编写该接口的方法。好的,我在导入
com.google.firebase.database.ValueEventListener
时遇到了问题,但经过处理后,现在它说,
类“从ValueEventListener派生的匿名类”必须声明为抽象类,或者在“ValueEventListener”中的“onDataChange(DataSnapshot)”上实现抽象方法。
。这里可能有什么问题?@Ashonko ValueEventListener是一个接口,当您实现一个接口时,您必须覆盖它的所有方法。只要让android studio自动完成它。。。当您编写新的ValueEventListener时,它应该自动编写该接口的方法。。