通过Firebase中的ID检索Java对象 [英] Retrieve Java object by ID from Firebase

查看:128
本文介绍了通过Firebase中的ID检索Java对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在编写一个Android应用程序,我试图从其Firebase相关表中检索类 User.java 的对象。我想知道如何从Java端获得它,只要我尝试了 Firebase官方文档,但他们都没有为我工作。

以这个问题为例,我想要一个具有以下方法接口:

  public User readUser(String userId); 

换句话说,我想执行:

readUser(-lnnROTBVv6FznK81k3n)



并检索关联的 User object

谢谢

----------- -------------------------------------------------- -编辑 - - - - - - - - - - - - - - - - - - - - - - - - --------------



我设法得到这个代码的值:

  public void retrieveUser(final String email){
firebaseUsersRef.addValueEventListener(new ValueEventListener(){
@Override
(DataSnapshot messageSnapshot:dataSnapshot.getChildren()){
if(messageSnapshot.getKey()。equals(Email.encodeID(email))){$ b $ public void onDataChange(DataSnapshot dataSnapshot){
b
retrieveUser = messageSnapshot.getValue(User.class);
break ;



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

请不要retrieveUser是一个类属性,因此字段。我从代码访问该字段,但即使我看到它在调试器上的值,调用代码上为空。

任何提示?我不能只是在方法本身返回它,所以它会是:

  public User retrieveUser(final String email) ; 

谢谢

解决方案 div>

所以这里是灵魂,我没有把它放在一个方法,虽然。

 最终字符串uid = 你的UID在这里; 
//获取对用户的引用
Firebase ref = new Firebase(Constants.FIREBASE_URL_USERS);
//附加一个监听器来读取我们的用户
ref.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot snapshot){

for(DataSnapshot user:snapshot.getChildren()){
//这就是您需要通过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());
}
});


I am writing an Android app and I am trying to retrieve an object of the class User.java by ID from its Firebase pertinent table. I would like to know how to get it from Java side, as long as I tried the examples stated in Firebase Official docs but none of them is working for me.

Taking this SO question as example, I want a method with the following interface:

public User readUser(String userId);

In other words, I want to execute:

readUser(-lnnROTBVv6FznK81k3n)

and retrieve the associated User object

Thanks

--------------------------------------------------------------EDIT--------------------------------------------------------------:

I managed to get the value with this code:

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) { }
        });
    }

Please not retrievedUser is a class attribute, thus a field. I am accessing that field from the code, but even I see it takes the value on the debugger, it is being null on the calling code.

Any hint? Can´t I just return it in the method itself, so it would be?:

public User retrieveUser(final String email);

Thanks

解决方案

so here is the soultion, I didn't put it in a method though.

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中的ID检索Java对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆