When I start to click the comment activity, it is showing the error:
com.google.firebase.database.DatabaseException: Class org.w3c.dom.Comment does not define a no-argument constructor. If you are using ProGuard, make sure these constructors are not stripped.
public class CommentActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private CommentAdapter commentAdapter;
private List<Comment> commentList;
private EditText addComment;
private CircleImageView imageProfile;
private TextView post;
private String postId;
private String authorId;
FirebaseUser fUser;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_comment);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Comments");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
Intent intent = getIntent();
postId = intent.getStringExtra("postId");
authorId = intent.getStringExtra("authorId");
recyclerView = findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
commentList = new ArrayList<>();
commentAdapter = new CommentAdapter(this, commentList, postId);
recyclerView.setAdapter(commentAdapter);
addComment = findViewById(R.id.add_comment);
imageProfile = findViewById(R.id.image_profile);
post = findViewById(R.id.post);
fUser = FirebaseAuth.getInstance().getCurrentUser();
getUserImage();
post.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (TextUtils.isEmpty(addComment.getText().toString())) {
Toast.makeText(CommentActivity.this, "No comment added!", Toast.LENGTH_SHORT).show();
} else {
putComment();
}
}
});
getComment();
}
private void getComment() {
FirebaseDatabase.getInstance().getReference().child("Comments").child(postId).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot Snapshot) {
commentList.clear();
for (DataSnapshot snapshot : Snapshot.getChildren()) {
Comment comment = Snapshot.getValue(Comment.class);
commentList.add(comment);
}
commentAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError Error) {
}
});
}
private void putComment() {
HashMap<String, Object> map = new HashMap<>();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Comments").child(postId);
String id = ref.push().getKey();
map.put("id", id);
map.put("comment", addComment.getText().toString());
map.put("publisher", fUser.getUid());
addComment.setText("");
ref.child(id).setValue(map).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(CommentActivity.this, "Comment added!", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(CommentActivity.this, task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
}
private void getUserImage() {
FirebaseDatabase.getInstance().getReference().child("Users").child(fUser.getUid()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot Snapshot) {
User user = Snapshot.getValue(User.class);
if (user.getImageurl().equals("default")) {
imageProfile.setImageResource(R.mipmap.ic_launcher);
} else {
Picasso.get().load(user.getImageurl()).into(imageProfile);
}
}
@Override
public void onCancelled(@NonNull DatabaseError Error) {
}
});
}
}
public class CommentAdapter extends RecyclerView.Adapter<CommentAdapter.ViewHolder> {
private Context mContext;
private List<Comment> mComments;
String postId;
private FirebaseUser fUser;
public CommentAdapter(Context mContext, List<Comment> mComments , String postId) {
this.mContext = mContext;
this.mComments = mComments;
this.postId = postId;
}
public CommentAdapter(CommentActivity mContext, List<org.w3c.dom.Comment> commentList, String 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 final ViewHolder holder, int position) {
fUser = FirebaseAuth.getInstance().getCurrentUser();
final Comment comment = mComments.get(position);
holder.comment.setText(comment.getComment());
FirebaseDatabase.getInstance().getReference().child("Users").child(comment.getPublisher()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
holder.username.setText(user.getUsername());
if (user.getImageurl().equals("default")) {
holder.imageProfile.setImageResource(R.mipmap.ic_launcher);
} else {
Picasso.get().load(user.getImageurl()).into(holder.imageProfile);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
holder.comment.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, MainActivity.class);
intent.putExtra("publisherId", comment.getPublisher());
mContext.startActivity(intent);
}
});
holder.imageProfile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, MainActivity.class);
intent.putExtra("publisherId", comment.getPublisher());
mContext.startActivity(intent);
}
});
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (comment.getPublisher().endsWith(fUser.getUid())) {
AlertDialog alertDialog = new AlertDialog.Builder(mContext).create();
alertDialog.setTitle("Do you want to delete?");
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(final DialogInterface dialog, int which) {
FirebaseDatabase.getInstance().getReference().child("Comments")
.child(postId).child(comment.getId()).removeValue().addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Toast.makeText(mContext, "Comment deleted successfully!", Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
}
});
}
});
alertDialog.show();
}
return true;
};
});
}
@Override
public int getItemCount() {
return mComments.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
public CircleImageView imageProfile;
public TextView username;
public TextView comment;
public ViewHolder(@NonNull View itemView) {
super(itemView);
imageProfile = itemView.findViewById(R.id.image_profile);
username = itemView.findViewById(R.id.username);
comment = itemView.findViewById(R.id.comment);
}
}
}