Java 当我打开一个应用程序,然后它关闭和logcat错误是返回一个空指针。如何解决这个错误?
java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“java.lang.String com.google.firebase.auth.FirebaseUser.getUid()” 位于rishabh.example.chatapp.ChatsFragment.onCreateView(ChatsFragment.java:51) ChatsFragment.java的代码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
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");
}
}
};