【问题标题】:Retrieve Java object by ID from Firebase从 Firebase 通过 ID 检索 Java 对象
【发布时间】:2016-04-27 17:55:20
【问题描述】:

我正在编写一个 Android 应用程序,我正在尝试通过 ID 从其 Firebase 相关表中检索 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) { }
        });
    }

请不要检索用户是一个类attribute,因此是一个field。我正在从代码中访问该字段,但即使我看到它在调试器上取值,它在调用代码上为空

有什么提示吗?我不能只在方法本身中返回它吗?:

public User retrieveUser(final String email);

谢谢

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答,但能否请您提供完整的方法?我不确定如何将实际用户作为对象检索
    • 我试图将其作为一种方法,但是您在这里有一个内部类,当您从其中调用本地字段时会导致问题。但是您可以定义一个用户实例并调用此代码来实例化它。然后你可以用那个对象做你想做的事。
    • 谢谢朋友,你能把它翻译成代码吗?我不太明白
    • 能否附上完整的代码,看看问题出在哪里
    • 那将是另一个问题,您能否将您最初建议的代码放入返回 User.java 对象的方法中? (我不在乎你是否返回一个虚构的 User 对象或任何 Java 对象)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2021-01-03
    相关资源
    最近更新 更多