Java Firebase getUid()函数仅返回NULL

Java Firebase getUid()函数仅返回NULL,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,PostListFragment由我的应用程序中的其他片段扩展。我需要当前用户的uid,但它总是返回null。当我尝试运行我的应用程序时,总是会出现以下错误: FATAL EXCEPTION: main Process: com.example.cleeg.squad, PID: 8524 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.firebase.a

PostListFragment由我的应用程序中的其他片段扩展。我需要当前用户的uid,但它总是返回null。当我尝试运行我的应用程序时,总是会出现以下错误:

FATAL EXCEPTION: main
Process: com.example.cleeg.squad, PID: 8524
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.google.firebase.auth.FirebaseUser.getUid()' on a null object reference
     at com.example.cleeg.squad.fragments.PostListFragment.getUid(PostListFragment.java:162)
     at com.example.cleeg.squad.fragments.MyPostsFragment.getQuery(MyPostsFragment.java:19)
     at com.example.cleeg.squad.fragments.PostListFragment.onActivityCreated(PostListFragment.java:76)
我试图找出为什么这是在线的,但我只是越来越困惑,我真的不知道如何修复它。 函数getUid()位于代码的底部

public abstract class PostListFragment extends Fragment {

private static final String TAG = "PostListFragment";

private DatabaseReference mDatabaseReference;

private FirebaseRecyclerAdapter<Post, PostViewHolder> mAdapter;
private RecyclerView mRecycler;
private LinearLayoutManager mManager;

public PostListFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    View rootView = inflater.inflate(R.layout.fragment_all_posts, container, false);

    mDatabaseReference = FirebaseDatabase.getInstance().getReference();

    mRecycler = (RecyclerView) rootView.findViewById(R.id.messages_list);
    mRecycler.setHasFixedSize(true);

    return rootView;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    // Set up Layout Manager, reverse layout
    mManager = new LinearLayoutManager(getActivity());
    mManager.setReverseLayout(true);
    mManager.setStackFromEnd(true);
    mRecycler.setLayoutManager(mManager);

    // Set up FirebaseRecyclerAdapter with the Query
    Query postsQuery = getQuery(mDatabaseReference);
    mAdapter = new FirebaseRecyclerAdapter<Post, PostViewHolder>(Post.class, R.layout.item_post,
            PostViewHolder.class, postsQuery) {
        @Override
        protected void populateViewHolder(final PostViewHolder viewHolder, final Post model, final int position) {
            final DatabaseReference postRef = getRef(position);

            // Set click listener for the whole post view
            final String postKey = postRef.getKey();
            viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // Launch PostDetailActivity
                    Intent intent = new Intent(getActivity(), PostDetailActivity.class);
                    intent.putExtra(PostDetailActivity.EXTRA_POST_KEY, postKey);
                    startActivity(intent);
                }
            });

            // Determine if the current user has liked this post and set UI accordingly
            if (model.stars.containsKey(getUid())) {
                viewHolder.starView.setImageResource(R.drawable.ic_toggle_star_24);
            } else {
                viewHolder.starView.setImageResource(R.drawable.ic_toggle_star_outline_24);
            }

            // Bind Post to ViewHolder, setting OnClickListener for the star button
            viewHolder.bindToPost(model, new View.OnClickListener() {
                @Override
                public void onClick(View starView) {
                    // Need to write to both places the post is stored
                    DatabaseReference globalPostRef = mDatabaseReference.child("posts").child(postRef.getKey());
                    DatabaseReference userPostRef = mDatabaseReference.child("user-posts").child(model.uid).child(postRef.getKey());

                    // Run two transactions
                    onStarClicked(globalPostRef);
                    onStarClicked(userPostRef);
                }
            });
        }
    };
    mRecycler.setAdapter(mAdapter);
}

private void onStarClicked(DatabaseReference postRef) {
    postRef.runTransaction(new Transaction.Handler() {
        @Override
        public Transaction.Result doTransaction(MutableData mutableData) {
            Post p = mutableData.getValue(Post.class);
            if (p == null) {
                return Transaction.success(mutableData);
            }

            if (p.stars.containsKey(getUid())) {
                // Unstar the post and remove self from stars
                p.starCount = p.starCount - 1;
                p.stars.remove(getUid());
            } else {
                // Star the post and add self to stars
                p.starCount = p.starCount + 1;
                p.stars.put(getUid(), true);
            }

            // Set value and report transaction success
            mutableData.setValue(p);
            return Transaction.success(mutableData);
        }

        @Override
        public void onComplete(DatabaseError databaseError, boolean b,
                               DataSnapshot dataSnapshot) {
            // Transaction completed
            Log.d(TAG, "postTransaction:onComplete:" + databaseError);
        }
    });
}

@Override
public void onDestroy() {
    super.onDestroy();
    if (mAdapter != null) {
        mAdapter.cleanup();
    }
}

public String getUid() {
    return FirebaseAuth.getInstance().getCurrentUser().getUid();
}

public abstract Query getQuery(DatabaseReference databaseReference);
公共抽象类PostListFragment扩展了片段{
私有静态最终字符串TAG=“PostListFragment”;
私有数据库引用mDatabaseReference;
私人FirebaseRecyclerAdapter mAdapter;
私人垃圾回收站;
私人直线酒店经理/经理;
公共PostListFragment(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
super.onCreateView(充气机、容器、保存状态);
视图根视图=充气机。充气(R.layout.fragment\u所有柱,容器,假);
mDatabaseReference=FirebaseDatabase.getInstance().getReference();
mRecycler=(RecyclerView)rootView.findviewbyd(R.id.messages\u列表);
mRecycler.setHasFixedSize(true);
返回rootView;
}
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
//设置布局管理器,反向布局
mManager=newlinearlayoutmanager(getActivity());
mManager.setReverseLayout(true);
mManager.setStackFromEnd(true);
mRecycler.setLayoutManager(mManager);
//使用查询设置FirebaseRecyclerAdapter
Query postsQuery=getQuery(mDatabaseReference);
mAdapter=新FirebaseRecyclerAdapter(Post.class,R.layout.item_Post,
PostViewHolder.class,postsQuery){
@凌驾
受保护的void populateViewHolder(最终PostViewHolder、最终Post模型、最终int位置){
最终数据库参考postRef=getRef(位置);
//为整个post视图设置click listener
最后一个字符串postKey=postRef.getKey();
viewHolder.itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//启动PostDetailActivity
Intent Intent=新的Intent(getActivity(),PostDetailActivity.class);
intent.putExtra(PostDetailActivity.EXTRA\u POST\u KEY,postKey);
星触觉(意向);
}
});
//确定当前用户是否喜欢此帖子,并相应地设置UI
if(model.stars.containsKey(getUid())){
viewHolder.rightView.setImageResource(R.drawable.ic_toggle_star_24);
}否则{
viewHolder.饥饿视图.setImageResource(R.drawable.ic\u开关\u星形\u轮廓\u 24);
}
//将Post绑定到ViewHolder,为星形按钮设置OnClickListener
viewHolder.bindToPost(model,newview.OnClickListener(){
@凌驾
公共void onClick(视图视图){
//需要写到帖子存储的两个位置
DatabaseReference globalPostRef=mDatabaseReference.child(“posts”).child(postRef.getKey());
DatabaseReference userPostRef=mDatabaseReference.child(“user posts”).child(model.uid).child(postRef.getKey());
//运行两个事务
onStarClicked(globalPostRef);
onStarClicked(userPostRef);
}
});
}
};
mRecycler.setAdapter(mAdapter);
}
私有void onStarClicked(数据库引用postRef){
postRef.runTransaction(新事务处理程序(){
@凌驾
公共事务.Result doTransaction(MutableData MutableData){
Post p=mutableData.getValue(Post.class);
if(p==null){
返回事务。成功(可变数据);
}
if(p.stars.containsKey(getUid())){
//解开柱子,把自己从星星上移开
p、 starCount=p.starCount-1;
p、 删除(getUid());
}否则{
//给帖子加上星号,并将自己添加到星号中
p、 starCount=p.starCount+1;
p、 stars.put(getUid(),true);
}
//设置值并报告事务成功
可变数据设置值(p);
返回事务。成功(可变数据);
}
@凌驾
public void onComplete(DatabaseError DatabaseError,布尔b,
数据快照(数据快照){
//交易完成
Log.d(标记“postTransaction:onComplete:+databaseError”);
}
});
}
@凌驾
公共空间{
super.ondestory();
如果(mAdapter!=null){
mAdapter.cleanup();
}
}
公共字符串getUid(){
返回FirebaseAuth.getInstance().getCurrentUser().getUid();
}
公共摘要查询getQuery(DatabaseReference DatabaseReference);

}

崩溃是因为没有链接任何用户,即getCurrentUser()为空。在获取用户ID之前,请将用户设置为您拥有该用户

if (FirebaseAuth.getInstance().getCurrentUser() != null) {
        mUserID = FirebaseAuth.getInstance().getCurrentUser().getUid();
} else {
        //login or register screen
}

崩溃是因为没有链接任何用户,即getCurrentUser()为空。在获取用户ID之前,请将用户设置为您拥有该用户

if (FirebaseAuth.getInstance().getCurrentUser() != null) {
        mUserID = FirebaseAuth.getInstance().getCurrentUser().getUid();
} else {
        //login or register screen
}
FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();
如果(用户!=null){
//用户已通过身份验证,现在您可以访问uesr的属性,如下所示
mUserID=user.getUid();
}否则{
//用户已通过身份验证。因此,让我们尝试重新验证
AuthCredential credential=EmailAuthProvider
.getCredential(“user@example.com“,“密码1234”);
//提示用户重新提供其登录凭据
用户重新验证(凭证)
.addOnCompleteListener(新的OnCompleteListener(){