无法从Firebase数据库中检索数据字段

时间:2017-06-06 11:51:00

标签: android firebase firebase-realtime-database

过去5天,我一直试图从我的firebase数据库中检索数据字段,但没有成功。这就是我的数据库的样子:

enter image description here

获取数据的代码:

private void alterTextView(final String id) {
        if(id!=null) {
        mDatabase.child("Users").child(id).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                UserInformation userInformation = dataSnapshot.getValue(UserInformation.class);
                String name = (String) userInformation.getName();


                Log.d("Main Activity",name);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
        mWelcomeUserMessage.setText("Welcome, "+name); 

    }
}`

我不知道为什么这个名字是'null'(参考log)。 有人能告诉我我做错了吗?

PS:我在UserInformation.java类中定义了一个空白的默认构造函数,getter和setter。

此外,mDatabase初始化如下: mDatabase = FirebaseDatabase.getInstance().getReference();

1 个答案:

答案 0 :(得分:2)

dataSnapshot.getValue(Class)只会将值加载并设置为公共字段。我发现你已经有了一个默认的构造函数。

将UserInformation类中的名称字段设为public。还要确保您调用getValue的快照是UserInformation类的有效JSON表示,并且具有完全相同的" name"字段(它必须与类中的名称字段完全匹配)。

请注意: addValueEventListener添加了一个侦听器,当数据可用时将调用该侦听器。

请注意,调用onDataChange后数据可用。这就是为什么在从DataSnapshot获取所需数据后应立即设置文本的原因。像那样:

private void alterTextView(final String id) {
            if(id!=null) {
            mDatabase.child("Users").child(id).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    UserInformation userInformation = dataSnapshot.getValue(UserInformation.class);
                    String name = (String) userInformation.getName();
                    Log.d("Main Activity",name);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run(){
                            mWelcomeUserMessage.setText("Welcome, "+name); 
                        }
                    });
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

        }
    }