java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'java.lang.String com.google.firebase.auth.FirebaseUser.getUid()'

问题描述 投票:0回答:2

美好的一天。我的应用程序中有一个错误,我不知道如何解决。当我尝试运行我的应用程序时,它只是说,不幸的是,应用程序已停止,并且在logcat中它说“ java.lang.NullPointerException:尝试调用虚拟方法'java.lang.String com.google.firebase.auth.FirebaseUser .getUid()'引用为空对象”。由于用户尚未登录,因此应该将用户带到登录活动。蝶les我真的很需要您的帮助。这是指向错误的片段代码。

package com.app.whatsupafrica;


import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.squareup.picasso.Picasso;

import de.hdodenhof.circleimageview.CircleImageView;


/**
* A simple {@link Fragment} subclass.
*/
public class ChatsFragment extends Fragment
{
private View PrivateChatsView;
private RecyclerView chatsList;

private DatabaseReference ChatsRef, UsersRef;
private FirebaseAuth mAuth;
private String currentUserID;


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


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    PrivateChatsView = inflater.inflate(R.layout.fragment_chats, container, false);


    mAuth = FirebaseAuth.getInstance();
    currentUserID = mAuth.getCurrentUser().getUid();
    ChatsRef = FirebaseDatabase.getInstance().getReference().child("Contacts").child(currentUserID);
    UsersRef = FirebaseDatabase.getInstance().getReference().child("Users");


    chatsList = (RecyclerView) PrivateChatsView.findViewById(R.id.chats_list);
    chatsList.setLayoutManager(new LinearLayoutManager(getContext()));


    return PrivateChatsView;
}


@Override
public void onStart()
{
    super.onStart();


    FirebaseRecyclerOptions<Contacts> options =
            new FirebaseRecyclerOptions.Builder<Contacts>()
            .setQuery(ChatsRef, Contacts.class)
            .build();


    FirebaseRecyclerAdapter<Contacts, ChatsViewHolder> adapter =
            new FirebaseRecyclerAdapter<Contacts, ChatsViewHolder>(options) {
                @Override
                protected void onBindViewHolder(@NonNull final ChatsViewHolder holder, int position, @NonNull Contacts model)
                {
                    final String usersIDs = getRef(position).getKey();
                    final String[] retImage = {"default_image"};

                    UsersRef.child(usersIDs).addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot)
                        {
                            if (dataSnapshot.exists())
                            {
                                if (dataSnapshot.hasChild("image"))
                                {
                                    retImage[0] = dataSnapshot.child("image").getValue().toString();
                                    Picasso.get().load(retImage[0]).into(holder.profileImage);
                                }

                                final String retName = dataSnapshot.child("name").getValue().toString();
                                final String retStatus = dataSnapshot.child("status").getValue().toString();

                                holder.userName.setText(retName);
                                // holder.userStatus.setText("Last Seen: " + "\n" + "Date " + " Time");

                                holder.itemView.setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v)
                                    {
                                        Intent chatIntent = new Intent(getContext(), ChatActivity.class);
                                        chatIntent.putExtra("visit_user_id", usersIDs);
                                        chatIntent.putExtra("visit_user_name", retName);
                                        chatIntent.putExtra("visit_image", retImage[0]);
                                        startActivity(chatIntent);
                                    }
                                });
                            }
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                    });
                }

                @NonNull
                @Override
                public ChatsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i)
                {
                    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.users_display_layout, viewGroup, false);
                    return new ChatsViewHolder(view);
                }
            };

    chatsList.setAdapter(adapter);
    adapter.startListening();
}




public static class ChatsViewHolder extends RecyclerView.ViewHolder
{
    CircleImageView profileImage;
    TextView userStatus, userName;


    public ChatsViewHolder(@NonNull View itemView)
    {
        super(itemView);

        profileImage = itemView.findViewById(R.id.users_profile_image);
        userStatus = itemView.findViewById(R.id.user_status);
        userName = itemView.findViewById(R.id.user_profile_name);
    }
}
}

如果有人知道如何解决此错误,请帮帮我。谢谢

java android database firebase nullpointerexception
2个回答
0
投票

检查用户是否登录

 if(! Objects.requireNonNull( mAuth.getUid() ).isEmpty())
     currentUserID = mAuth.getUid();
 else
     //sign in the user 

0
投票

添加此代码:

mAuth.getUid();

代替

mAuth.getCurrentUser().getUid();

显然当前用户为空

© www.soinside.com 2019 - 2024. All rights reserved.