В моем классе CommentAdapter. java у меня есть следующий код. Когда пользователь оставляет комментарий к определенному сообщению, значок изображения должен смениться с черного значка чата на желтый значок чата. Работает отлично. Проблема возникает, когда пользователь удалил комментарий, оставленный им в записи. Если они удаляют свой комментарий и других пользователей от этого поста к этому сообщению нет, значок чата должен быть изменен с желтого на черный.
Это работает, и я получаю желаемый результат, но по какой-то причине он выбрасывает нулевой указатель, страница зависает, перезагружается, а затем возвращает меня на домашнюю страницу с желаемым результатом. Мне нужно, чтобы весь процесс проходил гладко, очевидно, без каких-либо нулевых указателей.
И да, очевидно, я знаю, что такое нулевые указатели и как их исправить, но здесь я не могу понять, почему я их получаю. Значок чата существует и все.
Cra sh линия помечена стрелкой ниже.
CommentAdapter
public class CommentAdapter extends RecyclerView.Adapter<CommentAdapter.ViewHolder> {
ImageView mImageView;
private Context mContext;
private List<Comment> mComment;
private String postid;
private FirebaseUser mFirebaseUser;
public CommentAdapter(Context mContext, List<Comment> mComment, String postid) {
this.mContext = mContext;
this.mComment = mComment;
this.postid = postid;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.comment_item, parent, false);
return new CommentAdapter.ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
mFirebaseUser = FirebaseAuth.getInstance().getCurrentUser();
final Comment comment = mComment.get(position);
holder.comment.setText(comment.getComment());
getUserInfo(holder.image_profile, holder.username, comment.getPublisher());
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(final View v) {
if (comment.getPublisher().equals(mFirebaseUser.getUid())) {
AlertDialog alertDialog = new AlertDialog.Builder(mContext).create();
alertDialog.setTitle("Do you want to delete this comment?");
alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "No",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "Yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.d("POSTID ->", postid);
FirebaseDatabase.getInstance().getReference("Comments").child(postid).child(comment.getCommentid())
.setValue(null).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
-------------------------------------------> mImageView.setImageResource(R.drawable.ic_chat_black);
Toast.makeText(mContext, "Your comment has been deleted", Toast.LENGTH_SHORT).show();
}
}
});
dialog.dismiss();
}
});
alertDialog.show();
}
return true;
}
});
public static class ViewHolder extends RecyclerView.ViewHolder {
ImageView image_profile, imageView;
public TextView username, comment;
ViewHolder(@NonNull View itemView) {
super(itemView);
image_profile = itemView.findViewById(R.id.image_profile);
comment = itemView.findViewById(R.id.comment);
username = itemView.findViewById(R.id.username);
imageView = itemView.findViewById(R.id.commentPost);
}
}
Logcat
E / AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.e.events, PID: 18463 java .lang.NullPointerException: попытка вызвать виртуальный метод 'void android .widget.ImageView.setImageResource (int) 'для ссылки на пустой объект на com.e.events.Adapter.CommentAdapter $ 3 $ 2 $ 1.onComplete (CommentAdapter. java: 110) на com.google. android .gms.tasks.zzj.run ( Неизвестный источник: 4) в android .os.Handler.handleCallback (обработчик. java: 907) в android .os.Handler.dispatchMessage (обработчик. java: 105) в android .os. Looper.l oop (Looper. java: 216) в android .app.ActivityThread.main (ActivityThread. java: 7625) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit. java: 524) в com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 987)