com.google.firebase.database.Исключение DatabaseException: не удается преобразовать объект типа java.lang.string.Строку в тип com.Ошибка NoteModelActivity, возникающая внезапно

#java #database #android-studio #class

#java #База данных #android-studio #класс

Вопрос:

Мое приложение работало абсолютно нормально, но затем внезапно ни с того ни с сего я получаю эту ошибку:

  com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.NoteModelActivity
  

Я использую RecyclerView.
и я не могу понять, откуда внезапно возникла эта проблема в рабочем приложении.
как только я открываю действие, приложение вылетает. тогда как раньше без каких-либо изменений он работал отлично.

Я читал решения этого вопроса, но ответы были связаны с ‘toString’ в прослушивателе значений, но я уже реализовал это..

пожалуйста, помогите мне..

Мой logcat:

       com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.NoteModelActivity
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertBean(CustomClassMapper.java:435)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(CustomClassMapper.java:231)
    at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass(CustomClassMapper.java:79)
    at com.google.firebase.database.DataSnapshot.getValue(DataSnapshot.java:203)
    at com.firebase.ui.database.ClassSnapshotParser.parseSnapshot(ClassSnapshotParser.java:29)
    at com.firebase.ui.database.ClassSnapshotParser.parseSnapshot(ClassSnapshotParser.java:15)
    at com.firebase.ui.common.BaseCachingSnapshotParser.parseSnapshot(BaseCachingSnapshotParser.java:36)
    at com.firebase.ui.common.BaseObservableSnapshotArray.get(BaseObservableSnapshotArray.java:52)
    at com.firebase.ui.database.FirebaseRecyclerAdapter.getItem(FirebaseRecyclerAdapter.java:109)
    at com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:149)
    at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7065)
    at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7107)
    at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6012)
    at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6279)
    at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118)
    at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114)
    at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2303)
    at androidx.recyclerview.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:561)
    at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
    at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665)
    at androidx.recyclerview.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:170)
    at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
    at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3851)
    at androidx.recyclerview.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1897)
    at androidx.recyclerview.widget.RecyclerView$1.run(RecyclerView.java:414)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1147)
    at android.view.Choreographer.doCallbacks(Choreographer.java:958)
    at android.view.Choreographer.doFrame(Choreographer.java:881)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1133)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:226)
    at android.app.ActivityThread.main(ActivityThread.java:7224)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:500)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:913)
  
  

Мой класс модели:

       public class NoteModelActivity  {

public String noteTitle;
public String noteTime;

public NoteModelActivity() {

}

public NoteModelActivity(String noteTitle, String noteTime) {
    this.noteTitle = noteTitle;
    this.noteTime = noteTime;
}

public String getNoteTitle() {
    return noteTitle;
}

public void setNoteTitle(String noteTitle) {
    this.noteTitle = noteTitle;
}

public String getNoteTime() {
    return noteTime;
}

public void setNoteTime(String noteTime) {
    this.noteTime = noteTime;
}
  

Моя активность:

     fAuth = FirebaseAuth.getInstance();
    if (fAuth.getCurrentUser() != null) {
        fNotesDatabase = FirebaseDatabase.getInstance().getReference().child("Notes").child(fAuth.getCurrentUser().getUid());
    }
   loadData();
}

    private void loadData() {

         FirebaseRecyclerOptions<NoteModelActivity> options =
                 new FirebaseRecyclerOptions.Builder<NoteModelActivity>()
                 .setQuery(fNotesDatabase , NoteModelActivity.class)
                 .build();

    FirebaseRecyclerAdapter<NoteModelActivity, NoteViewHolderActivity>
            firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<NoteModelActivity, NoteViewHolderActivity>(options) {

        @NonNull
        @Override
        public NoteViewHolderActivity onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_note_layout, parent, false);
            NoteViewHolderActivity viewHolder = new NoteViewHolderActivity(view);
            return viewHolder;
        }

        @Override
        protected void onBindViewHolder(@NonNull final NoteViewHolderActivity holder, int position, @NonNull NoteModelActivity model) {

            final String noteId = getRef(position).getKey();

            fNotesDatabase.child(noteId).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if (dataSnapshot.hasChild("title") amp;amp; dataSnapshot.hasChild("timestamp")) {
                        String title = dataSnapshot.child("title").getValue(String.class);
                        String timestamp = dataSnapshot.child("timestamp").getValue(String.class);

                        holder.setNoteTitle(title);

                        GetTimeAgo getTimeAgo = new GetTimeAgo();
                        holder.setNoteTime(getTimeAgo.getTimeAgo(Long.parseLong(timestamp), getApplicationContext()));

                        holder.noteCard.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {
                                Intent intent = new Intent(PostActivity.this, NewNoteActivity.class);
                                intent.putExtra("noteId", noteId);
                                startActivity(intent);
                            }
                        });
                    }

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });


        }
    };
    mNotesList.setAdapter(firebaseRecyclerAdapter);
    firebaseRecyclerAdapter.startListening();
}
  

Теперь он показывает другую ошибку о другом действии, которое является моделью для другого действия recyclerview, эти два даже не связаны, и все же вышеуказанное действие является тем, которое завершается сбоем..

         Class com..postsRecyclerView does not define a no-argument constructor. If you are using ProGuard, make sure these constructors are not stripped.
  

другой класс модели;

   public class postsRecyclerView  {

public postsRecyclerView(String username, String article, String title, String date, String timestamp) {
    this.username = username;
    this.article = article;
    this.title = title;
    this.date = date;
    this.timestamp = timestamp;
}

public String username, title,article, date, timestamp;

public String getTimestamp() {
    return timestamp;
}

public void setTimestamp(String timestamp) {
    this.timestamp = timestamp;
}

public String getDate() {
    return date;
}

public void setDate(String date) {
    this.date = date;
}

public String getArticle() {
    return article;
}

public void setArticle(String article) {
    this.article = article;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}
  

}

Моя база данных firebase:

введите описание изображения здесь

Я был бы действительно признателен за вашу помощь… пожалуйста, помогите мне…

Ответ №1:

Для вашего класса postRecyclerview добавьте конструктор без параметра, это решит проблему «не определяет конструктор без аргументов». Нажмите ctrl alt insert, затем щелкните конструктор и выберите «Выбрать нет».Для вашей первой ошибки кажется, что у вас есть строка в базе данных, и метод извлечения не работает. Можете ли вы загрузить изображение вашей базы данных, чтобы я мог разобраться в вашей проблеме.

Комментарии:

1. Спасибо за ответ.. Это сработало .. а также моя основная проблема каким-то образом решена .. поскольку мое приложение внезапно снова работает…