我正在编写一个Android应用程序,并且试图从其Firebase相关表中按ID检索类User.java的对象.我想知道如何从Java端获取它,只要我尝试了Firebase Official docs中说明的示例,但是它们对我来说都不起作用.
以这个SO问题为例,我想要一个具有以下接口的方法:
public User readUser(String userId);
换句话说,我要执行:
readUser(-lnnROTBVv6FznK81k3n)
并检索关联的User对象
谢谢
————————————————– – – – – – – 编辑 – – – – – – – – – – – – – – – – – – – ————————-:
我设法通过以下代码获得了价值:
public void retrieveUser(final String email){
firebaseUsersRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot messageSnapshot: dataSnapshot.getChildren()) {
if(messageSnapshot.getKey().equals(Email.encodeID(email))){
retrievedUser = messageSnapshot.getValue(User.class);
break;
}
}
}
@Override
public void onCancelled(FirebaseError firebaseError) { }
});
}
请不要取回User是一个类属性,因此是一个字段.我正在从代码访问该字段,但是即使我看到它在调试器上使用了该值,在调用代码上也为null.
有什么提示吗?我不能只在方法本身中返回它吗?
public User retrieveUser(final String email);
谢谢
解决方法:
所以这是灵魂,虽然我没有把它放在方法上.
final String uid = "your Uid here";
// Get a reference to users
Firebase ref = new Firebase(Constants.FIREBASE_URL_USERS);
// Attach an listener to read our users
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot user: snapshot.getChildren()) {
//this is all you need to get a specific user by Uid
if (user.getKey().equals(uid)){
wantedUser = user.getValue(User.class);
}
//**********************************************
}
Log.i(TAG, "onDataChange: " + wantedUser.getName());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});
标签:firebase,firebase-realtime-database,java,android
来源: https://codeday.me/bug/20191118/2030438.html