【问题标题】:getting a null object reference when trying to receive data from firebase尝试从 firebase 接收数据时获取空对象引用
【发布时间】:2017-12-04 17:39:24
【问题描述】:

我正在尝试从 Firebase 读取数据,但它不适合我。数据库中已经有数据,但是当我使用 getUserFName 时,它​​表示该值为空。所以第二个代码来自注册活动,它为要匹配的数据库创建了一个身份验证和一个 ID。 id 保存类 UserInformation 的数据。所以这就是为什么我想知道为什么当我注册时有数据时我得到一个空对象。

databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot ds : dataSnapshot.getChildren()) {
                    UserInformation userInformation = new UserInformation();
                    userInformation.setUserFName(ds.child(userID).getValue(UserInformation.class).getUserFName());
                    userInformation.setUserLName(ds.child(userID).getValue(UserInformation.class).getUserLName());
                    userInformation.setUserEmail(ds.child(userID).getValue(UserInformation.class).getUserEmail());
                    userInformation.setUserDescription(ds.child(userID).getValue(UserInformation.class).getUserDescription());

                    fName.setText(userInformation.getUserFName());
                    lName.setText(userInformation.getUserLName());
                    email.setText(userInformation.getUserEmail());
                    aboutYou.setText(userInformation.getUserDescription());
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
firebaseAuth.createUserWithEmailAndPassword(email.getText().toString().trim(), password.getText().toString().trim())
                                        .addOnCompleteListener(NewUserActivity.this, new OnCompleteListener<AuthResult>() {
                                            @Override
                                            public void onComplete(@NonNull Task<AuthResult> task) {
                                                if (task.isSuccessful()) {
                                                    Toast.makeText(NewUserActivity.this, "Account Created. Sign in!", Toast.LENGTH_SHORT).show();

                                                    String id = firebaseAuth.getCurrentUser().getUid();
                                                    UserInformation userInformation = new UserInformation(firstName.getText().toString(), lastName.getText().toString(), email.getText().toString(),
                                                            password.getText().toString());
                                                    databaseReference.child(id).setValue(userInformation);

                                                    Intent created = new Intent(NewUserActivity.this, LoginActivity.class);
                                                    startActivity(created);
                                                    finish();
                                                } else if (password.getText().toString().length() < 6){
                                                    Toast.makeText(NewUserActivity.this, "Password at least 6 characters", Toast.LENGTH_SHORT).show();
                                                    progressDialog.dismiss();
                                                } else{
                                                    Toast.makeText(NewUserActivity.this, "Email already exists", Toast.LENGTH_SHORT).show();
                                                    progressDialog.dismiss();
                                                }

                                            }
                                        });

【问题讨论】:

  • 发布您用来创建引用的数据库结构和代码,不是反对者,而是原因它不完整的详细信息
  • 这很可能意味着您从错误的位置读取,该位置不包含用户信息。在这种情况下,发布初始化 databaseReference 的代码并将数据库中的 JSON 显示为该位置(作为文本,无屏幕截图),通过单击 Firebase Database console 中的“导出 JSON”链接获得。
  • 也可能是您没有权限读取数据,您可以按照以下说明进行检测:stackoverflow.com/documentation/firebase/5548/…

标签: java android firebase-realtime-database null data-retrieval


【解决方案1】:

您从错误的位置阅读。

databaseReference.child(userID).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        UserInformation userInformation = dataSnapshot.getValue(UserInformation.class);
        fName.setText(userInformation.getUserFName());
        lName.setText(userInformation.getUserLName());
        email.setText(userInformation.getUserEmail());
        aboutYou.setText(userInformation.getUserDescription());
    }
}

还要确保您在 Firebase 数据库中具有读取权限,如 https://firebase.google.com/docs/database/security/quickstart

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    相关资源
    最近更新 更多