#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. Спасибо за ответ.. Это сработало .. а также моя основная проблема каким-то образом решена .. поскольку мое приложение внезапно снова работает…