问题描述
当我调试这段代码的时候,在databaseUser中dataSnapshot有来自User的数据库的值,但是在对象 user1
中没有添加,全为null。我不明白,因为在对象事件接收值通常。 databaseEvent.child(getKeyEvent())。addListenerForSingleValueEvent (
new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
final Event event = dataSnapshot.getValue(Event.class);
user = FirebaseAuth.getInstance()。getCurrentUser(); $ b $ if(user!= null){
databaseUser.orderByChild(userEmail)。equalTo(user.getEmail ))。addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){$ b $ if(dataSnapshot.exists()){
//用户已经存在
User user1 = dataSnapshot.getValue(User.class);
}
}
});
我的数据库用户只能用于现在的测试:
public class User {
String userId;
字符串userEmail;
布尔userHasInterest;
字符串eventId;
public String getUserId(){
return userId;
}
public String getUserEmail(){
return userEmail;
$ b $ public Boolean getUserHasInterest(){
return userHasInterest;
}
public String getEventId(){
return eventId;
$ b $ public User(String userId,String eventId,String userEmail,Boolean userHasInterest){
this.userId = userId;
this.userEmail = userEmail;
this.userHasInterest = userHasInterest;
this.eventId = eventId;
}
和方法一样,只是挑选另一个活动事件的关键:
public String getKeyEvent(){
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String key = bundle.getString(Evento);
返回键;
Firebase数据库,可能会有多个结果。通过附加 ValueListener
,您可以在一个快照中获得这些结果,因此快照将包含这些结果的列表。即使只有一个结果,快照也会包含一个结果列表。
您的代码没有考虑到这个结果列表。通过循环 DataSnapshot.getChildren()
:
databaseUser.orderByChild(userEmail)。equalTo(user.getEmail())。addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
for DataSnapshot userSnapshot:dataSnapshot.getChildren()){
User user1 = userSnapshot.getValue(User.class);
When I debug this code, in databaseUser dataSnapshot has the values from User in database, but in the object user1
, did not add, it's all null. And I don't understand, because in the object event receives values normally.
databaseEvent.child(getKeyEvent()).addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final Event event = dataSnapshot.getValue(Event.class);
user = FirebaseAuth.getInstance().getCurrentUser();
if(user != null) {
databaseUser.orderByChild("userEmail").equalTo(user.getEmail()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
//User already exists
User user1 = dataSnapshot.getValue(User.class);
}
}
});
My Database User, only for test for now:
public class User {
String userId;
String userEmail;
Boolean userHasInterest;
String eventId;
public String getUserId() {
return userId;
}
public String getUserEmail() {
return userEmail;
}
public Boolean getUserHasInterest() {
return userHasInterest;
}
public String getEventId() {
return eventId;
}
public User(String userId, String eventId, String userEmail, Boolean userHasInterest) {
this.userId = userId;
this.userEmail = userEmail;
this.userHasInterest = userHasInterest;
this.eventId = eventId;
}
And the method, just to pick the key of the event of another activity :
public String getKeyEvent(){
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String key = bundle.getString("Evento");
return key;
}
When you execute a query against the Firebase Database, there will potentially be multiple results. By attaching a ValueListener
you get those results in one snapshot, so the snapshot contains a list of those results. Even if there is only a single result, the snapshot will contain a list of one result.
Your code fails to take this "list of results" into account. It's easy to fix by looping over the DataSnapshot.getChildren()
:
databaseUser.orderByChild("userEmail").equalTo(user.getEmail()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
User user1 = userSnapshot.getValue(User.class);
这篇关于如何从dataSnapshot获得价值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!