访问firebase中的getAuth()时出现空指针异常

时间:2017-07-10 16:39:51

标签: android firebase firebase-realtime-database firebase-authentication

我正在尝试访问用户在firebase数据库中编辑他/她自己的详细信息的权限,但我在调用root_dir_ref.getAuth().getUid()时发现了空指针异常。

数据库结构是 /用户/ {UID} /姓名,电话,年龄

数据库的规则是:

{
  "rules": {
  "Users":{
        "$uid":{
            ".read":true,
            ".write":"$uid == auth.uid"
        }
    }
  }
}

这是我的代码:

package com.example.limat.finder;

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.Toast;

    import com.firebase.client.Firebase;
    import com.google.firebase.auth.FirebaseAuth;
    import com.google.firebase.auth.FirebaseUser;

    public class SetupActivity extends AppCompatActivity {

        EditText username,age,phoneno;
        Button profile_pic_selector,submit_button;
        ImageView profile_pic;

        private Firebase root_dir_ref;
        private FirebaseAuth authoriser;
        private Firebase user_ref;

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

            Firebase.setAndroidContext(this);

            username = (EditText)findViewById(R.id.username);
            age = (EditText)findViewById(R.id.age);
            phoneno = (EditText)findViewById(R.id.phone_no);

            profile_pic_selector = (Button)findViewById(R.id.change_button);
            submit_button = (Button)findViewById(R.id.setup_submit_button);

            profile_pic = (ImageView)findViewById(R.id.profile_pic);

            authoriser = FirebaseAuth.getInstance();
            final FirebaseUser user = authoriser.getCurrentUser();
            root_dir_ref = new Firebase("https://finder-acbff.firebaseio.com/");
            user_ref = root_dir_ref.child("Users/"+root_dir_ref.getAuth().getUid());

            submit_button.setOnClickListener(
                    new Button.OnClickListener()
                    {
                        public void onClick(View v)
                        {
                            if(!username.getText().toString().equals("")&&!age.getText().toString().equals("")&&!phoneno.getText().toString().equals(""))
                            {

                                user_ref.child("Name").setValue(username.getText().toString());
                                user_ref.child("Age").setValue(age.getText().toString());
                                user_ref.child("Phone").setValue(phoneno.getText().toString());

                            }
                        }
                    }
            );


        }
    }

事实是我尝试了stackoverflow中可用的所有方法来进行用户编辑,但都拒绝将数据写入数据库的权限。

我尝试使用公共权限进行写入和阅读,并且完美无缺

只有当我有一些规则时才会起作用

我尝试了上面的代码,结果是空指针异常

2 个答案:

答案 0 :(得分:0)

如果您尚未启用身份验证方法,则可能会发生这种情况。 请检查您是否在Firebase控制台中启用了身份验证方法(Gmail,Facebook等)。

答案 1 :(得分:0)

由于您尚未登录用户,因此您的getCurrentUser()方法可能会返回null。以下是Firebase身份验证的文档。查看该网页上的登录用户部分https://firebase.google.com/docs/auth/android/start/
作为建议,您可以使用新文档创建数据库参考和管理数据库
https://firebase.google.com/docs/database/android/start/