【发布时间】:2019-05-22 14:50:28
【问题描述】:
我一直试图弄清楚为什么没有数据传输到RecyclerWiew。到现在还没有运气。在某些情况下,我什至得到:
“com.google.firebase.database.DatabaseException:无法将 java.lang.String 类型的对象转换为类型”错误
主活动
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private RecyclerView recyclerView;
private DatabaseReference databaseReference;
private FirebaseRecyclerOptions<Pond> options;
private FirebaseRecyclerAdapter<Pond, PondViewHolder> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
recyclerView.setHasFixedSize(true);
databaseReference = FirebaseDatabase.getInstance().getReference().child("pi1DetailTest");
options = new FirebaseRecyclerOptions.Builder<Pond>().setQuery(databaseReference, Pond.class).build();
adapter = new FirebaseRecyclerAdapter<Pond, PondViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull PondViewHolder holder, int position, @NonNull Pond model) {
holder.txtViewPiID.setText(model.getPiId());
holder.txtViewPondName.setText(model.getPondName());
holder.txtViewPondLocation.setText(model.getLocation());
}
@NonNull
@Override
public PondViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.activity_main_cardview, viewGroup, false);
return new PondViewHolder(view);
}
};
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
}
@Override
protected void onStart() {
super.onStart();
adapter.startListening();
}
ViewHolder
public class PondViewHolder extends RecyclerView.ViewHolder {
public TextView txtViewPiID;
public TextView txtViewPondName;
public TextView txtViewPondLocation;
public PondViewHolder(@NonNull View itemView) {
super(itemView);
txtViewPiID = (TextView) itemView.findViewById(R.id.txtViewPiID);
txtViewPondName = (TextView) itemView.findViewById(R.id.txtViewPondName);
txtViewPondLocation = (TextView) itemView.findViewById(R.id.txtViewPondLocation);
}
}
型号
public class Pond {
public String piId;
public String pondName;
public String location;
public Pond(String piId, String pondName, String location) {
this.piId = piId;
this.pondName = pondName;
this.location = location;
}
public Pond(){
}
public String getPiId() {
return piId;
}
public void setPiId(String piId) {
this.piId = piId;
}
public String getPondName() {
return pondName;
}
public void setPondName(String pondName) {
this.pondName = pondName;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
我希望带有 Pond 类数据的卡片视图会显示在回收站视图中。请帮忙。谢谢。
附加信息 == 这是来自 logcat 的错误
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.testappagain.Pond
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertBean(com.google.firebase:firebase-database@@17.0.0:418)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(com.google.firebase:firebase-database@@17.0.0:214)
at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass(com.google.firebase:firebase-database@@17.0.0:79)
at com.google.firebase.database.DataSnapshot.getValue(com.google.firebase:firebase-database@@17.0.0:212)
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:35)
at com.firebase.ui.common.BaseObservableSnapshotArray.get(BaseObservableSnapshotArray.java:52)
at com.firebase.ui.database.FirebaseRecyclerAdapter.getItem(FirebaseRecyclerAdapter.java:106)
at com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:122)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6781)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6823)
at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5752)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6019)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3641)
at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1888)
at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:407)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:603)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
【问题讨论】:
-
更新:我尝试使用 Firestore 回收器适配器并且它有效。我基本上没有太大变化。如果两者的逻辑相同,我现在更困惑为什么它在 Firestore 而不是在 Firebase(Realtime DB) 中工作。
-
请添加整个错误和您的数据库结构的屏幕截图。
-
我已经发布了错误。感谢您的检查。如果你看到任何东西,请告诉我。 :)
-
我已经问过你,也请添加你的数据库结构。
-
添加了我要从中获取数据的屏幕截图。
标签: java android firebase firebase-realtime-database android-recyclerview