Java 当我打开一个应用程序,然后它关闭和logcat错误是返回一个空指针。如何解决这个错误?

Java 当我打开一个应用程序,然后它关闭和logcat错误是返回一个空指针。如何解决这个错误?,java,android,firebase,android-studio,firebase-authentication,Java,Android,Firebase,Android Studio,Firebase Authentication,java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“java.lang.String com.google.firebase.auth.FirebaseUser.getUid()” 位于rishabh.example.chatapp.ChatsFragment.onCreateView(ChatsFragment.java:51) ChatsFragment.java的代码 public class ChatsFragment extends Fragme

java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“java.lang.String com.google.firebase.auth.FirebaseUser.getUid()” 位于rishabh.example.chatapp.ChatsFragment.onCreateView(ChatsFragment.java:51)

ChatsFragment.java的代码

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 view)
                                        {
                                            Intent chatIntent = new Intent(getContext(), ChatActivity.class);
                                            chatIntent.putExtra("visit_user_id", usersIDs);
                                            chatIntent.putExtra("visit_user_name", retName);
                                            chatIntent.putExtra("visit_user_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);
            userName = itemView.findViewById(R.id.user_profile_name);
            userStatus = itemView.findViewById(R.id.user_status);
        }
    }
}
公共类ChatsFragment扩展片段
{
私有视图私有视图;
私人回收站查看聊天列表;
私有数据库引用ChatsRef,UsersRef;
私人消防队;
私有字符串currentUserID;
公共聊天片段(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
PrivateChatsView=充气机。充气(R.layout.fragment\u chats,容器,假);
mAuth=FirebaseAuth.getInstance();
currentUserID=mAuth.getCurrentUser().getUid();
ChatsRef=FirebaseDatabase.getInstance().getReference().child(“联系人”).child(currentUserID);
UsersRef=FirebaseDatabase.getInstance().getReference().child(“用户”);
chatsList=(RecyclerView)PrivateChatsView.findViewById(R.id.chats\u列表);
setLayoutManager(新的LinearLayoutManager(getContext());
返回PrivateChatsView;
}
@凌驾
public void onStart()
{
super.onStart();
FirebaseRecyclerOptions选项=
新的FirebaseRecyclerOptions.Builder()
.setQuery(ChatsRef,Contacts.class)
.build();
FirebaseRecyclerAdapter适配器=
新FirebaseRecyclerAdapter(选件){
@凌驾
受保护的无效onBindViewHolder(@NonNull final ChatsViewHolder holder,int position,@NonNull Contacts model)
{
最后一个字符串usersIDs=getRef(position).getKey();
最终字符串[]重映像={“默认映像”};
UsersRef.child(usersIDs).addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot)
{
if(dataSnapshot.exists())
{
if(dataSnapshot.hasChild(“图像”))
{
retImage[0]=dataSnapshot.child(“图像”).getValue().toString();
Picasso.get().load(重影[0])到(holder.profileImage)中;
}
最后一个字符串retName=dataSnapshot.child(“name”).getValue().toString();
最终字符串retStatus=dataSnapshot.child(“status”).getValue().toString();
holder.userName.setText(retName);
holder.userStatus.setText(“上次看到:”+“\n”+“日期”+“时间”);
holder.itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图)
{
Intent chatIntent=新的Intent(getContext(),ChatActivity.class);
putExtra(“访问用户id”,userSID);
chatIntent.putExtra(“访问用户名”,retName);
putExtra(“访问用户图像”,重图像[0]);
星触觉;
}
});
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError)
{
}
});
}
@非空
@凌驾
public ChatsViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i)
{
View View=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.users\u display\u布局,viewGroup,false);
返回新的ChatsViewHolder(视图);
}
};
chatsList.setAdapter(适配器);
adapter.startListening();
}
公共静态类ChatsViewHolder扩展了RecyclerView.ViewHolder
{
圆形图像查看轮廓图像;
TextView用户状态,用户名;
公共ChatsViewHolder(@NonNull-View-itemView)
{
超级(项目视图);
profileImage=itemView.findviewbyd(R.id.users\u profile\u image);
userName=itemView.findviewbyd(R.id.user\u profile\u name);
userStatus=itemView.findviewbyd(R.id.user\u status);
}
}
}
我不知道代码在哪里出错,无法找到错误。请帮我找到错误

指向以下行时出错:currentUserID=mAuth.getCurrentUser().getUid()


这一行在许多活动中使用,没有给出任何错误,但在这个活动中,这一行给出了一个空错误。请帮助我解决此错误。

在创建
聊天片段时,当前用户似乎未初始化

  • 最简单的修复方法是在用户初始化之前不创建
    ChatsFragment

  • 另一个简单的修复方法是仅在存在curren时附加数据库侦听器
     mAuth = FirebaseAuth.getInstance();
     if (mAuth.getCurrentUser() != null) {
         currentUserID = mAuth.getCurrentUser().getUid();
         ChatsRef = FirebaseDatabase.getInstance().getReference().child("Contacts").child(currentUserID);
         UsersRef = FirebaseDatabase.getInstance().getReference().child("Users");
     }
    
     mAuth = FirebaseAuth.getInstance();
     mAuth.onAuthStateChanged(new FirebaseAuth.AuthStateListener() {
         @Override
         public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
             FirebaseUser user = firebaseAuth.getCurrentUser();
             if (user != null) {
                 currentUserID = mAuth.getCurrentUser().getUid();
                 ChatsRef = FirebaseDatabase.getInstance().getReference().child("Contacts").child(currentUserID);
                 UsersRef = FirebaseDatabase.getInstance().getReference().child("Users");
             }
         }
     };