首页 > 解决方案 > 数据快照中的 Nullpointer exeption 字符串出错

问题描述

我知道过去有人问过这个问题。我已经尝试了几乎所有他们的解决方案都对我不起作用。很抱歉再次问这个问题。但是有人可以帮我解决这个错误。

这是我的代码。

public class ProfileActivity extends AppCompatActivity {

TextView userEmail;
TextView userID;
TextView userGender;
TextView userName;
Button userLogout;

FirebaseAuth firebaseAuth;
FirebaseUser firebaseUser;

FirebaseDatabase firebaseDatabase;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_profile);

    userEmail = findViewById(R.id.tvUserEmail);
    userGender = findViewById(R.id.tvGender);
    userName = findViewById(R.id.tvName);
    userID = findViewById(R.id.tvUserID);
    userLogout = findViewById(R.id.btnLogout);

    firebaseAuth = FirebaseAuth.getInstance();
    firebaseUser = firebaseAuth.getCurrentUser();


    firebaseDatabase = FirebaseDatabase.getInstance();
    DatabaseReference databaseReference = firebaseDatabase.getReference().child(firebaseUser.getUid());

    //userEmail.setText(firebaseUser.getEmail());

    databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            String userEmailstr = dataSnapshot.child("email").getValue().toString();
            String userNamestr = dataSnapshot.child("name").getValue().toString();
            String userGenderstr = dataSnapshot.child("gender").getValue().toString();
            String userIDstr = dataSnapshot.child("id").getValue().toString();


            userEmail.setText(userEmailstr);
            userGender.setText(userGenderstr);
            userName.setText(userNamestr);
            userID.setText(userIDstr);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Toast.makeText(getApplicationContext(),databaseError.getMessage(),Toast.LENGTH_SHORT).show();
        }
    });



    userLogout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            FirebaseAuth.getInstance().signOut();
            Intent intent = new Intent(ProfileActivity.this, MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
            startActivity(intent);
        }
    });
}}

错误出现在数据快照字符串上。据说它在一个空对象引用上

这是日志猫

 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
    at com.example.patrick.test.ProfileActivity$1.onDataChange(ProfileActivity.java:60)
    at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@16.0.5:75)
    at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@16.0.5:63)
    at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@16.0.5:55)

这是我的数据库 在此处输入图像描述

标签: javaandroidfirebasefirebase-realtime-database

解决方案


你需要改变

DatabaseReference databaseReference = firebaseDatabase.getReference().child(firebaseUser.getUid());

DatabaseReference databaseReference = firebaseDatabase.getReference().child("Accounts").child(firebaseUser.getUid());

您指向错误的节点。不包含所需数据。

笔记:

您不需要在push_id内部存储为id.

您可以简单地获取它而无需将其存储在里面。

String userIDstr = dataSnapshot.getKey();

推荐阅读