我正在尝试访问用户在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中可用的所有方法来进行用户编辑,但都拒绝将数据写入数据库的权限。
我尝试使用公共权限进行写入和阅读,并且完美无缺
只有当我有一些规则时才会起作用
我尝试了上面的代码,结果是空指针异常
答案 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/