java.lang.NullPointerException Firebase

时间:2018-10-29 14:02:53

标签: java android firebase firebase-realtime-database

我一直受此问题困扰2天,但无法解决

我有此代码

public class SettingsActivity extends AppCompatActivity {
 private DatabaseReference mUserDatabase;
 private FirebaseUser mCurrentUser;
 //Android Layout

 private CircleImageView mDisplayImage;
 private TextView mName;
 private TextView mStatus;
 private Button mStatusBtn;
 private Button mImageBtn;
 private static final int GALLERY_PICK = 1;

 // Storage Firebase
 private ProgressDialog mProgressDialog;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_settings);

     mDisplayImage = (CircleImageView) findViewById(R.id.settings_image);
     mName = (TextView) findViewById(R.id.settings_name);
     mStatus = (TextView) findViewById(R.id.settings_status);
     mStatusBtn = (Button) findViewById(R.id.settings_status_btn);
     mImageBtn = (Button) findViewById(R.id.settings_image_btn);
     mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();

     String current_uid = mCurrentUser.getUid();
     mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid);
     mUserDatabase.keepSynced(true);
     mUserDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            String name = dataSnapshot.child("name").getValue().toString();
            final String image = dataSnapshot.child("image").getValue().toString();
            String status = dataSnapshot.child("status").getValue().toString();
            String thumb_image = dataSnapshot.child("thumb_image").getValue().toString();
            mName.setText(name);
            mStatus.setText(status);
        }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
 }
}

在我的日志中,我遇到了这个问题

  

E / Android运行时:致命异常:主要       流程:com.example.pc.newchatj,PID:724       java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“ java.lang.String java.lang.Object.toString()”           在com.example.pc.newchatj.SettingsActivity $ 1.onDataChange(SettingsActivity.java:74)           com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database @@ 16.0.4:75)           com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database @@ 16.0.4:63)           com.google.firebase.database.core.view.EventRaiser $ 1.run(com.google.firebase:firebase-database @@ 16.0.4:55)           在android.os.Handler.handleCallback(Handler.java:739)           在android.os.Handler.dispatchMessage(Handler.java:95)           在android.os.Looper.loop(Looper.java:135)           在android.app.ActivityThread.main(ActivityThread.java:5254)           在java.lang.reflect.Method.invoke(本机方法)           在java.lang.reflect.Method.invoke(Method.java:372)           在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903)           在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

这是我的FirebaseDatabase屏幕

enter image description here

请问有什么帮助,谢谢!!!

2 个答案:

答案 0 :(得分:4)

从Firebase字段名称"_中删除name双引号和status空格。

答案 1 :(得分:1)

在Martin的回答中,您也可以这样做

String name = dataSnapshot.child("name").getValue(String.class);

代替此

String name = dataSnapshot.child("name").getValue().toString();

此外,请始终确保您的引用与Firebase控制台上的数据完全匹配,并始终使用

if(dataSnapshot.exists()){....}

在获得任何结果之前,您可以在那里找到任何问题

例如

    if(dataSnapshot.exists()){
    String name = dataSnapshot.child("name").getValue().toString();
                final String image = dataSnapshot.child("image").getValue().toString();
                String status = dataSnapshot.child("status").getValue().toString();
                String thumb_image = dataSnapshot.child("thumb_image").getValue().toString();
                mName.setText(name);
                mStatus.setText(status);

    }
  ...