Я хочу показывать сообщения всех пользователей с помощью адаптера Firebase Recycler. Но я получил ошибку исключения базы данных Firebase, и мое приложение упало. Я не знаю, что я делаю не так?
Сначала я все делал правильно, и мое приложение работало идеально. Тогда я не знаю, что я сделал неправильно, но сейчас я застрял и не знаю, как решить эту проблему. Насколько я думаю, я вносил изменения в какую-то другую деятельность, но потом я отменил это. Но я не понимаю, как происходит ошибка в сообщениях, потому что я не вносил здесь никаких изменений, и раньше она работала идеально.
Это моя база данных:
postRef= FirebaseDatabase.getInstance().getReference().child("Posts");
Вот мой код адаптера Firebase Recycler:
FirebaseRecyclerOptions<Posts> options=new FirebaseRecyclerOptions.Builder<Posts>()
.setQuery(postRef,Posts.class)
.build();
FirebaseRecyclerAdapter<Posts,PostsViewHolder> firebaseRecyclerAdapter=new FirebaseRecyclerAdapter<Posts, PostsViewHolder>(options)
{
@Override
protected void onBindViewHolder(@NonNull final PostsViewHolder holder, int position, @NonNull final Posts model) {
final String postKey=getRef(position).getKey();
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent clickPostIntent=new Intent(MainActivity.this, ClickPostActivity.class);
clickPostIntent.putExtra("postKey",postKey);
startActivity(clickPostIntent);
}
});
holder.username.setText(model.getFullname());
holder.date.setText(model.getDate());
holder.time.setText(model.getTime());
if (model.getPost_uri_link()!=null){
holder.post_link.setText(model.getPost_uri_link());
}
else {
holder.post_link.setVisibility(View.GONE);
}
if (model.getPost_file_name()!=null && model.getPost_file_uri()!=null) {
holder.file_attach_name.setText(model.getPost_file_name());
holder.file_attach_name.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
downloadFile(MainActivity.this,model.getPost_file_name(),"gs://studentcornerproject-be4c6.appspot.com/post files",model.getPost_file_uri());
}
});
}
else{
holder.file_attach_name.setVisibility(View.GONE);
}
if (model.getDescription()!=null) {
holder.description.setText(model.getDescription());
}
else {
holder.description.setVisibility(View.GONE);
}
if (model.getPost_img()!=null) {
Picasso.get().load(model.post_img).networkPolicy(NetworkPolicy.OFFLINE).into(holder.post_img, new Callback() {
@Override
public void onSuccess() {
postRef.child("post_img").keepSynced(true);
}
@Override
public void onError(Exception e) {
Picasso.get().load(model.post_img).into(holder.post_img);
}
});
}
else {
holder.post_img.setVisibility(View.GONE);
}
Picasso.get().load(model.profile_image).networkPolicy(NetworkPolicy.OFFLINE).into(holder.prof_img, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError(Exception e) {
Picasso.get().load(model.profile_image).into(holder.prof_img);
}
});
}
@NonNull
@Override
public PostsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.all_posts_users,viewGroup,false);
PostsViewHolder viewHolder=new PostsViewHolder(view);
return viewHolder;
}
};
postslist.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();
}
public static class PostsViewHolder extends RecyclerView.ViewHolder
{
TextView username,date,time,description,file_attach_name,post_link;
CircleImageView prof_img;
ImageView post_img;
public PostsViewHolder(@NonNull View itemView) {
super(itemView);
post_link=itemView.findViewById(R.id.post_link);
username=itemView.findViewById(R.id.post_user_name);
date=itemView.findViewById(R.id.post_date);
time=itemView.findViewById(R.id.post_time);
description=itemView.findViewById(R.id.post_description);
file_attach_name=itemView.findViewById(R.id.post_filename);
prof_img=itemView.findViewById(R.id.post_profile_img);
post_img=itemView.findViewById(R.id.post_image);
}
}
Вот мой Posts.class:
public String uid, date, time, description, fullname, profile_image, post_img, post_file_uri, post_file_name,post_uri_link;
//default constructor
public Posts() {
}
public Posts(String uid, String date, String time, String description, String fullname, String profile_image,String post_uri_link, String post_img, String post_file_uri, String post_file_name) {
this.uid = uid;
this.date = date;
this.time = time;
this.description = description;
this.fullname = fullname;
this.profile_image = profile_image;
this.post_img = post_img;
this.post_file_uri = post_file_uri;
this.post_file_name = post_file_name;
this.post_uri_link=post_uri_link;
}
public String getPost_uri_link() {
return post_uri_link;
}
public void setPost_uri_link(String post_uri_link) {
this.post_uri_link = post_uri_link;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getFullname() {
return fullname;
}
public void setFullname(String fullname) {
this.fullname = fullname;
}
public String getProfile_image() {
return profile_image;
}
public void setProfile_image(String profile_image) {
this.profile_image = profile_image;
}
public String getPost_img() {
return post_img;
}
public void setPost_img(String post_img) {
this.post_img = post_img;
}
public String getPost_file_uri() {
return post_file_uri;
}
public void setPost_file_uri(String post_file_uri) {
this.post_file_uri = post_file_uri;
}
public String getPost_file_name() {
return post_file_name;
}
public void setPost_file_name(String post_file_name) {
this.post_file_name = post_file_name;
}
Я получил следующую ошибку:
2019-05-23 01: 41: 13.708 26524-26524 / com.studentcornerapp.studentcorner E / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основное
Процесс: com.studentcornerapp.studentcorner, PID: 26524
com.google.firebase.database.DatabaseException: невозможно преобразовать объект типа java.lang.String в тип com.studentcornerapp.studentcorner.Posts.Posts
на com.google.android.gms.internal.firebase_database.zzkt.zzb (неизвестный источник: 209)
на com.google.android.gms.internal.firebase_database.zzkt.zza (неизвестный источник: 0)
на com.google.firebase.database.DataSnapshot.getValue (неизвестный источник: 10)
в com.firebase.ui.database.ClassSnapshotParser.parseSnapshot (ClassSnapshotParser.java:29)
в com.firebase.ui.database.ClassSnapshotParser.parseSnapshot (ClassSnapshotParser.java:15)
на com.firebase.ui.common.BaseCachingSnapshotParser.parseSnapshot (BaseCachingSnapshotParser.java:35)
в com.firebase.ui.common.BaseObservableSnapshotArray.get (BaseObservableSnapshotArray.java:52)
в com.firebase.ui.database.FirebaseRecyclerAdapter.getItem (FirebaseRecyclerAdapter.java:106)
в com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder (FirebaseRecyclerAdapter.java:122)
на android.support.v7.widget.RecyclerView $ Adapter.onBindViewHolder (RecyclerView.java:6781)
на android.support.v7.widget.RecyclerView $ Adapter.bindViewHolder (RecyclerView.java:6823)
на android.support.v7.widget.RecyclerView $ Recycler.tryBindViewHolderByDeadline (RecyclerView.java:5752)
на android.support.v7.widget.RecyclerView $ Recycler.tryGetViewHolderForPositionByDeadline (RecyclerView.java:6019)
на android.support.v7.widget.RecyclerView $ Recycler.getViewForPosition (RecyclerView.java:5858)
на android.support.v7.widget.RecyclerView $ Recycler.getViewForPosition (RecyclerView.java:5854)
на android.support.v7.widget.LinearLayoutManager $ LayoutState.next (LinearLayoutManager.java:2230)
на android.support.v7.widget.LinearLayoutManager.layoutChunk (LinearLayoutManager.java:1557)
на android.support.v7.widget.LinearLayoutManager.fill (LinearLayoutManager.java:1517)
на android.support.v7.widget.LinearLayoutManager.onLayoutChildren (LinearLayoutManager.java:612)
на android.support.v7.widget.RecyclerView.dispatchLayoutStep2 (RecyclerView.java:3924)
на android.support.v7.widget.RecyclerView.dispatchLayout (RecyclerView.java:3641)
на android.support.v7.widget.RecyclerView.consumePendingUpdateOperations (RecyclerView.java:1888)
на android.support.v7.widget.RecyclerView $ 1.run (RecyclerView.java:407)
на android.view.Choreographer $ CallbackRecord.run (Хореограф.java:981)
на android.view.Choreographer.doCallbacks (Choreographer.java:790)
на android.view.Choreographer.doFrame (Хореограф.java:718)
на android.view.Choreographer $ FrameDisplayEventReceiver.run (Choreographer.java:967)
на android.os.Handler.handleCallback (Handler.java:808)
на android.os.Handler.dispatchMessage (Handler.java:101)
на android.os.Looper.loop (Looper.java:166)на android.app.ActivityThread.main (ActivityThread.java:7529)
в java.lang.reflect.Method.invoke (родной метод)
на com.android.internal.os.Zygote $ MethodAndArgsCaller.run (Zygote.java:245)
на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:921)