【发布时间】:2017-06-29 21:51:41
【问题描述】:
我正在为暑期学校开发聊天应用程序。这是我的第一个 android 应用程序,我们被告知要使用 Firebase。虽然在 Firebase 中使用内置登录非常简单,但我读到您无法访问注册用户列表,所以我试图解决这个问题。我又做了一张桌子。 用户登录后,我在表中搜索他的电子邮件,如果它不存在,他的电子邮件(用作昵称)被添加到表中。然后,我想使用表格的内容,与其他注册用户创建聊天。但是,由于某些原因,我的应用程序没有将 User 对象推送到 Firebase,因为我已经在控制台中对其进行了检查。它只是不存在。问题在哪里?代码总是进入 if 的内部。
该部分的代码,我将其发送到 Firebase。
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SIGN_IN_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
Toast.makeText(this,
"Successfully signed in. Welcome!",
Toast.LENGTH_LONG)
.show();
displayChatMessages();
setUserInfo();
FirebaseDatabase.getInstance().getReference("server/users").equalTo(FirebaseAuth.getInstance().getCurrentUser().getEmail().toString()).addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println("Am i inside?" + dataSnapshot.hasChildren());
if (!dataSnapshot.hasChildren()) {
User user = new User(FirebaseAuth.getInstance().getCurrentUser().getEmail());
FirebaseDatabase.getInstance().getReference("server/users").push().setValue(user);
System.out.println("I am at the end. " + FirebaseAuth.getInstance().getCurrentUser().getDisplayName() + " " + FirebaseDatabase.getInstance().getReference("server/users").toString());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
System.out.println("ERROR: " + databaseError.toString());
}
}
);
} else {
Toast.makeText(this,
"We couldn't sign you in. Please try again later.",
Toast.LENGTH_LONG)
.show();
// Close the app
finish();
}
}
}
我的用户类:
public class User {
private String nickName;
public User(){}
public User(String nickName){
}
public String getNickName(){
return nickName;
}
public void setNickName(String nickName){
this.nickName=nickName;
}
}
使用此代码,我想从 firebase 中找回用户:
FirebaseDatabase.getInstance().getReference("server/users").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
User user = userSnapshot.getValue(User.class);
if (user.getNickName() != FirebaseAuth.getInstance().getCurrentUser().getEmail())
users.add(user);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
谢谢:)
【问题讨论】:
-
您能否提供 Firebase 上的数据层次结构,或者如果您通过代码添加用户,您也可以向我们提供这部分内容。
标签: android firebase firebase-realtime-database