Java 如何检索当前用户id并将其放入片段中

Java 如何检索当前用户id并将其放入片段中,java,android,firebase,nullpointerexception,firebase-authentication,Java,Android,Firebase,Nullpointerexception,Firebase Authentication,我正在创建一个帐户片段,因此我想检索名称和图像数据,但这会使我的应用程序强制关闭: 这是我的账户片段: 导入android.content.Context; 导入android.content.Intent; 导入android.net.Uri; 导入android.nfc.Tag; 导入android.os.Bundle; 导入android.support.annotation.NonNull; 导入android.support.v4.app.Fragment; 导入android.ut

我正在创建一个帐户片段,因此我想检索
名称
图像
数据,但这会使我的应用程序强制关闭:

这是我的账户片段:

导入android.content.Context;
导入android.content.Intent;
导入android.net.Uri;
导入android.nfc.Tag;
导入android.os.Bundle;
导入android.support.annotation.NonNull;
导入android.support.v4.app.Fragment;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.bumptech.glide.glide;
导入com.bumptech.glide.request.RequestOptions;
导入com.google.android.gms.tasks.OnCompleteListener;
导入com.google.android.gms.tasks.Task;
导入com.google.firebase.auth.FirebaseAuth;
导入com.google.firebase.auth.FirebaseUser;
导入com.google.firebase.firestore.DocumentSnapshot;
导入com.google.firebase.firestore.FirebaseFirestore;
导入com.google.firebase.storage.firebase存储;
导入com.google.firebase.storage.StorageReference;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.zip.Inflater;
导入de.hdodenhof.circleimageview.circleimageview;
导入静态android.support.constraint.Constraints.TAG;
/**
*一个简单的{@link Fragment}子类。
*/
公共类AccountFragment扩展了片段{
私有存储参考存储参考;
私有FirebaseAuth FirebaseAuth;
私人FirebaseFirestore FirebaseFirestore;
私有Uri mainImageURI=null;
私有字符串用户标识;
私有文本视图帐户名;
私有CircleImageView帐户映像;
公共帐户片段(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图=充气机。充气(R.layout.fragment\u帐户,容器,false);
getUser();
返回视图;
}
受保护的void getUser(){
FirebaseUser currentUser=FirebaseAuth.getInstance().getCurrentUser();
user_id=firebaseAuth.getCurrentUser().getUid();
accountName=getView().findViewById(R.id.account\u name);
accountImage=getView().findViewById(R.id.account\u image);
firebaseFirestore.collection(“Users”).document(用户id).get().addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull TaskTask){
if(task.issusccessful()){
如果(task.getResult().exists()){
字符串名称=task.getResult().getString(“名称”);
String image=task.getResult().getString(“image”);
mainImageURI=Uri.parse(图像);
accountName.setText(名称);
RequestOptions占位符request=newrequestoptions();
占位符请求。占位符(R.drawable.person);
Glide.with(AccountFragment.this).setDefaultRequestOptions(placeholderRequest).load(image).into(accountImage);
}
}否则{
字符串错误=task.getException().getMessage();
Toast.makeText(getContext(),“(FIRESTORE检索错误):“+错误,Toast.LENGTH_LONG.show();
}
}
});
}

}
很明显,您正在使用非实例化变量来获取数据。 尝试将更改为:

protected void getUser() {

FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();

user_id = currentUser.getUid();
....
}

显然,您正在使用not instancied变量来获取数据。 尝试将更改为:

protected void getUser() {

FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();

user_id = currentUser.getUid();
....
}

要获取用户的uid,只需使用以下代码行:

FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
if (firebaseUser != null) {
    String uid = firebaseUser.getUid(); //Do what you need to do with your uid
}

检查firebaseUser是否为空也很重要。

要获取用户的uid,只需使用以下代码行:

FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
if (firebaseUser != null) {
    String uid = firebaseUser.getUid(); //Do what you need to do with your uid
}

检查
firebaseUser
是否为空也很重要。

这对我很有用:

//in Class definition.
private FirebaseFirestore firebaseFirestore;
private FirebaseAuth firebaseAuth;
private FirebaseUser currentUser;

//Declareation in Oncreate()
currentUser = firebaseAuth.getCurrentUser();
userId = currentUser.getUid();
private void setUserName() {
    /*
        Assign the value of profile_name_of field in the document of the current user
        under Users collection.
        pre:---.
        post: changes the value of the instance variable of username.
     */

    firebaseFirestore.collection("Users").document(userId)
            .get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {

        @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
            DocumentSnapshot documentSnapshot = task.getResult();

            if(documentSnapshot.exists()){

                List<String> list = new ArrayList<>();
                Map<String, Object> map = documentSnapshot.getData();

                if(map != null){

                    for(Map.Entry<String, Object> entry : map.entrySet()){
                        list.add(entry.getValue().toString());
                    }

                    username = list.get(0);
                    Toast.makeText(context,
                          "username"+username,
                          Toast.LENGTH_LONG).show();
                }
            }
        }
    });
}
//在类定义中。
私人FirebaseFirestore FirebaseFirestore;
私有FirebaseAuth FirebaseAuth;
私有FirebaseUser当前用户;
//Oncreate()中的声明
currentUser=firebaseAuth.getCurrentUser();
userId=currentUser.getUid();
私有void setUserName(){
/*
在当前用户的文档中指定profile\u name\u字段的值
在用户集合下。
pre:--。
post:更改用户名实例变量的值。
*/
firebaseFirestore.collection(“用户”).document(用户ID)
.get().addOnCompleteListener(新的OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
DocumentSnapshot DocumentSnapshot=task.getResult();
if(documentSnapshot.exists()){
列表=新的ArrayList();
Map Map=documentSnapshot.getData();
if(map!=null){
对于(Map.Entry:Map.entrySet()){
添加(entry.getValue().toString());
}
用户名=list.get(0);
Toast.makeText(上下文,
“用户名”+用户名,
Toast.LENGTH_LONG).show();
}
}
}
});
}

这对我很有用:

//in Class definition.
private FirebaseFirestore firebaseFirestore;
private FirebaseAuth firebaseAuth;
private FirebaseUser currentUser;

//Declareation in Oncreate()
currentUser = firebaseAuth.getCurrentUser();
userId = currentUser.getUid();
private void setUserName() {
    /*
        Assign the value of profile_name_of field in the document of the current user
        under Users collection.
        pre:---.
        post: changes the value of the instance variable of username.
     */

    firebaseFirestore.collection("Users").document(userId)
            .get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {

        @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
            DocumentSnapshot documentSnapshot = task.getResult();

            if(documentSnapshot.exists()){

                List<String> list = new ArrayList<>();
                Map<String, Object> map = documentSnapshot.getData();

                if(map != null){

                    for(Map.Entry<String, Object> entry : map.entrySet()){
                        list.add(entry.getValue().toString());
                    }

                    username = list.get(0);
                    Toast.makeText(context,
                          "username"+username,
                          Toast.LENGTH_LONG).show();
                }
            }
        }
    });
}
//在类定义中。
私人FirebaseFirestore FirebaseFirestore;
私有FirebaseAuth FirebaseAuth;
私有FirebaseUser当前用户;
//Oncreate()中的声明
currentUser=firebaseAuth.getCurrentUser();
userId=currentUser.getUid();
私有void setUserName(){
/*
在当前用户的文档中指定profile\u name\u字段的值
在用户集合下。
pre:--。
post:更改用户名实例变量的值。
*/
firebaseFirestore.collection(“用户”).document(用户ID)
.get().addOnCompleteListener(新的OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
DocumentSnapshot DocumentSnapshot=task.getResult();
如果(documentSnapshot.exist)