java.lang.NullPointerException Firebase

java.lang.NullPointerException Firebase,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我已经受这个问题困扰两天了,我无法解决它 我有这个密码 public class SettingsActivity extends AppCompatActivity { private DatabaseReference mUserDatabase; private FirebaseUser mCurrentUser; //Android Layout private CircleImageView mDisplayImage; private TextView mName; p

我已经受这个问题困扰两天了,我无法解决它

我有这个密码

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/AndroidRuntime:致命异常:主 进程:com.example.pc.newchatj,PID:724 java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“java.lang.String java.lang.Object.toString” 在com.example.pc.newchatj.SettingsActivity$1.onDataChangeSettingsActivity.java:74 位于com.google.firebase.database.core.ValueEventRegistration.fireventcom.google.firebase:firebase数据库@@16.0.4:75 位于com.google.firebase.database.core.view.DataEvent.firecom.google.firebase:firebase数据库@@16.0.4:63 位于com.google.firebase.database.core.view.EventRaiser$1.runcom.google.firebase:firebase数据库@@16.0.4:55 位于android.os.Handler.handleCallbackHandler.java:739 在android.os.Handler.dispatchMessageHandler.java:95 在android.os.Looper.Looper.java:135 在android.app.ActivityThread.mainActivityThread.java:5254 在java.lang.reflect.Method.Invokenactive方法中 位于java.lang.reflect.Method.invokeMethod.java:372 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.runZygoteInit.java:903 位于com.android.internal.os.ZygoteInit.mainZygoteInit.java:698

这是我的FirebaseDatabase屏幕


能不能请任何新的帮助,谢谢

从Firebase字段名称和状态中删除双引号和空格。

添加到Martin answer中,您也可以这样做

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);

    }
  ...

这意味着onDataChange函数中的一个属性上的.getValue返回null。firebase数据库结构是什么样子的?哪一行是第74行?@TheLoverter名称后有一个空格,但是的,我认为这也是应该起作用的。是的,firebase中的变量正在破坏您的数据!看起来值中也有手动添加的引号。我认为Firebase不会在控制台显示中的任何内容周围加引号。我也很好奇OP是如何设置数据的。如果是以编程方式完成的,则需要修复该代码。@TheWander字符串数据周围的引号是正确的;刚刚选中。@漫游者字段名和数值没有引号。。。字符串可以。