从firebase检索数据时出现Nullpointer异常

时间:2017-08-27 08:10:20

标签: java android firebase firebase-realtime-database

我正在为我的应用程序使用firebase数据库,我将用户保存在其中。 这是我的UserInformation课程:

public class UserInformation {


private String email1;
private String Password1;
public HashMap<String, Boolean> SayingsLevels=new HashMap<>();
public HashMap<String, Boolean> songs=new HashMap<>();

public UserInformation (String email, String Password){
    this.email1=email;
    this.Password1=Password;
    SayingsLevels.put("1", false);
    SayingsLevels.put("2", false);
    SayingsLevels.put("3", false);
    songs.put("1", false);
    songs.put("2", false);
    songs.put("3", false);

}

我在主要活动中用这段代码保存了它:

firebaseUser=FirebaseAuth.getInstance().getCurrentUser();
                UserInformation user=new UserInformation(email1,password1);
                String id=firebaseUser.getUid();
                mDatabaseReference.child("user").child(id).setValue(user);

现在,我希望获取存储在我的数据库中的hashmap数据。 我使用了以下代码:

mDatabase.addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            mDatabase = FirebaseDatabase.getInstance().getReference();
            firebaseuser=FirebaseAuth.getInstance().getCurrentUser();
            id=firebaseuser.getUid();

           for(DataSnapshot dataSnapshot1: dataSnapshot.getChildren() ){
               UserInformation user= dataSnapshot1.child("user").child(id).getValue(UserInformation.class);

            }

但是对于变量用户我一直都在null,我做错了什么? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

您需要在附加监听器之前初始化mDatabase

mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        firebaseuser=FirebaseAuth.getInstance().getCurrentUser();
        id=firebaseuser.getUid();

       for(DataSnapshot dataSnapshot1: dataSnapshot.getChildren() ){
           UserInformation user= dataSnapshot1.child("user").child(id).getValue(UserInformation.class);

        }

但请注意,此代码将下载整个数据库,因此请查找单个用户的数据。随着应用程序用户群的增长,您将下载越来越多不需要的数据。

我建议只下载当前用户的数据:

mDatabase = FirebaseDatabase.getInstance().getReference();
firebaseuser=FirebaseAuth.getInstance().getCurrentUser();
id=firebaseuser.getUid();

mDatabase.child("users").child(id).addValueEventListener(new ValueEventListener() {

    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        UserInformation user= dataSnapshot.getValue(UserInformation.class);

最后:我建议您通过研究以及相关问题来学习如何解决NullPointerException问题:What is a NullPointerException, and how do I fix it?