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结构中没有任何节点具有keyUsers
。您只是假设了用户的性别吗?哦!是的,那是个错误@M.waqaspervezt之所以发生这种情况,是因为当您将对象解析为字符串时,查询返回一个对象<代码>字符串myStrign=dataSnapshot.getValue(String.class)代码>。您需要定义一个可以转换返回的快照的POJO。谢谢您的回答。你能举例说明答案吗@M.WaqasPervezAlso您的firebase结构中没有任何节点具有keyUsers
。您只是假设了用户的性别吗?哦!是的,那是个错误@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时,它应该自动编写该接口的方法。。