【问题标题】:Android - can't retrieve data from firebase with a given uidAndroid - 无法使用给定的 uid 从 firebase 检索数据
【发布时间】:2016-09-04 17:42:13
【问题描述】:

我的Firebase database 结构是:

我想检索某个用户的全名,当我有它的密钥时。

我的代码:

public class ProfileActivity extends AppCompatActivity implements View.OnClickListener {

    private FirebaseAuth firebaseAuth;
    private TextView textView;
    private Button logbutton,wantToDeliverButton,lookForButton;
    private String userName;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profile);
        Firebase.setAndroidContext(this);textView = (TextView)findViewById(R.id.textView2);
        Firebase usersRef = new Firebase("https://myfirstfirebaseauth.firebaseio.com");
        firebaseAuth = FirebaseAuth.getInstance();
        if (firebaseAuth.getCurrentUser() == null){
            finish();
            startActivity(new Intent(this,LoginActivity.class));
        }
        FirebaseUser user = firebaseAuth.getCurrentUser();
        Firebase ref = usersRef.child("User").child(user.getUid());
        ref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                userName = dataSnapshot.getValue(User.class).getFullName();

            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {

            }
        });
        textView.setText("welcome "+userName);
    }
}

但是它将textView 设置为null。我尝试将 Toast 放入 onDataChange() 方法中,但它不起作用。似乎它甚至没有进入方法。

FirebaseUser user = firebaseAuth.getCurrentUser(); 行是正确的,因为如果我写的是textView.setText("welcome "+ user.getEmail()); - 我真的收到了正确的电子邮件。

如何解决这个问题?我使用了正确的听众吗?我不想更改数据库中的任何内容,只需检索即可。

编辑:它转到onCancelled()

【问题讨论】:

  • 您的问题与android-studio 无关。不要使用不适当的标签发送垃圾邮件!标记已删除。
  • 对不起,伙计,我是在 android studio 中写的..不是故意垃圾邮件..
  • 使用什么工具并不重要。您标记与您的问题相关 - 所以如果它是 firebase 相关代码,您遇到问题,您只标记它 firebasejava 也不是真正相关 - 您在这里没有任何 java 语言问题) , 您用于创建该代码的工具与您的问题无关。
  • @MarcinOrlowski 您对 Android Studio 标记是正确的。但请记住,大多数开发人员在标记时并不意味着伤害,他们只是没有意识到标记没有帮助(并且会伤害有实际 Android Studio 相关问题的人)。我只是编辑标签,如果他们重复它,一个温和的提醒会有很长的路要走。我现在经常把它比作问“我应该把三尖牛排腌多久?”然后用 [厨房] 标记。 :-)
  • @user3552460 @qbix 对混合版本一针见血。除此之外,您的用户可能没有对该节点的读取权限,并且您在对其进行身份验证之前附加了侦听器。在您的onCancelled 中始终至少抛出错误:throw firebaseError.toException(),否则您将隐藏诸如此类的问题。

标签: android firebase firebase-realtime-database


【解决方案1】:

您正在混合使用旧版 2.5.X Firebase SDK(例如:Firebase.setAndroidContext())和新的 9.X.X SDK(例如:FirebaseAuth.getInstance())的功能。这几乎肯定是失败的秘诀。重新编写代码以仅使用新的 SDK。 Setup Guide is here

【讨论】:

  • 非常感谢 - 我所要做的就是更改 'Firebase.setAndroidContext(this);'到 'FirebaseDatabase.getInstance().getReference();'
猜你喜欢
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多