PutExtra然后GetStringExtra仍然指向空?

时间:2018-02-24 21:29:06

标签: android android-intent

Androdi工作室的新手,我遇到了一个通常很容易解决的问题,但这次很难,我不知道自己错过了什么。

我把钥匙放在这里是额外的:(我使用firebase作为我的数据库)

DatabaseReference mChildDatabase = mDatabaseRef.child("Users").push();
            String key_user = mChildDatabase.getKey();
            Intent in = new Intent(MainActivity.this, Profile.class);
            in.putExtra("USER_KEY" ,  key_user);
            in.putExtra("USER_EMAIL" ,  String.valueOf(dataUser.child("emailUser").getValue()));
            in.putExtra("USER_PASS" ,  String.valueOf(dataUser.child("passWordUser").getValue()));
            in.putExtra("USER_ID" ,  String.valueOf(dataUser.child("userID").getValue()));
            startActivity(in);

关于第二项活动,我在这里获得额外的收益:

  String userNameString = name.getText().toString();
        String userPhoneString  = phone.getText().toString();
        String userAgeString  = age.getText().toString();
        String userBirthString = birth.getText().toString();
        String userUserNameString = username.getText().toString();

        //GET USER KEY  FROM INTENT
        String userKey = getIntent().getStringExtra("USER_KEY");
        mFirebaseDatabase.child(userKey).child("userName").setValue(userNameString);
        String userEmail = getIntent().getStringExtra("USER_EMAIL");
        String userPass = getIntent().getStringExtra("USER_PASS");
        String userID = getIntent().getStringExtra("USER_ID");

注意这一行? mFirebaseDatabase.child(userKey).child("userName").setValue(userNameString);

我在该行上收到错误,因为它说我指的是空的,我不知道发生了什么事我已经好几个小时了。所以我决定最后在这里问一下,我可能只是愚蠢或者什么。但是,我是在误导某些事情。

我像这样宣布了参考:

  DatabaseReference mDatabaseRef,mFirebaseDatabase;



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

        mFirebaseInstance = FirebaseDatabase.getInstance();
        mFirebaseDatabase = mFirebaseInstance.getReference().child("Users");

我的火力架看起来像这样:

picture

我不知道发生了什么,为什么我无法将userName设置为某种东西。为什么它指向null?我重复了一些过去的代码,但两者都没有用。我有一个使用firebase的应用程序,它实现就像我做的那样,但在这种情况下,我无法正确设置它。请帮忙。

更新:logcat显示密钥是未显示的密钥,这就是为什么它指向null,但是我仍然卡住了。我把我的头发拉出来,我是如此愚蠢。仍然没有工作

3 个答案:

答案 0 :(得分:0)

请看看

if(userKey!=null && userNameString!=null){
 if(mFirebaseDatabase.child(userKey)!=null){
   if(mFirebaseDatabase.child(userKey).child("userName")!=null){
    mFirebaseDatabase.child(userKey).child("userName").setValue(userNameString);
   }
 }
}

答案 1 :(得分:0)

而不是String userKey = getIntent().getStringExtra("USER_KEY");,请尝试以下代码:

String userKey = getIntent().getStringExtra(MainActivity."USER_KEY");

另外,请包含一些日志记录或Toast以查看变量的实际值。

答案 2 :(得分:0)

retrieving data使用以下代码:

    DatabaseReference dataUser = mFirebaseInstance.getReference("Users");
    dataUser.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot != null) {
                //dataSnapshot points to the User node with list of users
                //Retrieve data from the childrens emailUser,passWordUser,userID and Invoke start activity
                for (DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) {
                    Log.d("onDataChange:", "PARENT: " + childDataSnapshot.getKey());
                    Log.i("emailUser: ",
                            String.valueOf(childDataSnapshot.child("emailUser").getValue()));
                    Log.i("passWordUser: ",
                            String.valueOf(childDataSnapshot.child("passWordUser").getValue()));
                    Log.i("userID: ",
                            String.valueOf(childDataSnapshot.child("userID").getValue()));
                }
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

addListenerForSingleValueEvent可用于读取数据一次