我正面臨這個問題,因爲我讀了這篇文章database.DatabaseException: Can't convert object of type java.lang.String to type,但仍然得到相同的錯誤,請問哪裏錯了。我需要您的幫助是Firebase中的新功能。com.google.firebase.database.DatabaseException:無法將java.lang.String類型的對象轉換爲使用RecyclerView的類型
這是我MainActivity.java
類
public class MainActivity extends AppCompatActivity {
private Button but;
private DatabaseReference mRef;
private MyAdapter adapter;
public RecyclerView recyclerView;
public List<ModelClass> doctors;
public Context c;
private LinearLayoutManager linearLayoutManager;
public DatabaseReference mMovieRef ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
doctors = new ArrayList<ModelClass>();
recyclerView =(RecyclerView) findViewById(R.id.recyclerview);
linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setHasFixedSize(true);
mRef = FirebaseDatabase.getInstance().getReference("Doctors");
mRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
LoadData(dataSnapshot);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
LoadData(dataSnapshot);
}
public void onChildRemoved(DataSnapshot dataSnapshot) { }
public void onChildMoved(DataSnapshot dataSnapshot, String s) { }
public void onCancelled(DatabaseError databaseError) { }
});
}
public void LoadData (DataSnapshot dataSnapshot){
for(DataSnapshot ds :dataSnapshot.getChildren()){
System.out.println(ds.getValue());
ModelClass doc =ds.getValue(ModelClass.class);
doctors.add(doc);
adapter = new MyAdapter(MainActivity.this, doctors);
recyclerView.setAdapter(adapter);
}
}
}
這是我Adapter
類
public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
protected Context c;
List<ModelClass> doctors;
FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference url =storage.getReferenceFromUrl("gs://askdoctor-546bf.appspot.com/");
private List<ModelClass> itemList = null;
public MyAdapter(Context c, List<ModelClass> doctors) {
this.c = c;
this.doctors = doctors;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_activity,parent,false);
MyViewHolder holder = new MyViewHolder(v);
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
final ModelClass feedItems = itemList.get(position);
holder.name.setText(doctors.get(position).getDoctorsName());
holder.email_txt.setText(doctors.get(position).getEmail());
// PicassoClient.downloadImage(c,doctors.get(position).getUrl(),holder.img);
//Download image using picasso library
Picasso.with(c).load(url+ feedItems.getPhoto())
.error(R.mipmap.ic_launcher).
resize(120, 50)
.placeholder(R.mipmap.ic_launcher).into(holder.img);
}
@Override
public int getItemCount() {
return doctors.size();
}
}
這是我model
類
public class ModelClass {
private String DoctorsName;
private String Email;
private String Phone;
private String Photo;
public ModelClass() {
// empty default constructor, necessary for Firebase to be able to deserialize posts
}
public String getDoctorsName() {
return DoctorsName;
}
public void setDoctorsName(String doctorsName) {
DoctorsName = doctorsName;
}
public String getEmail() {
return Email;
}
public void setEmail(String email) {
Email = email;
}
public String getPhone() {
return Phone;
}
public void setPhone(String phone) {
Phone = phone;
}
public String getPhoto() {
return Photo;
}
public void setPhoto(String photo) {
Photo = photo;
}
}
這是我的火力地堡database Console picture。
請註明完整,最小碼+ JSON(文字,沒有截圖),在你的問題重現問題。還包括完整的堆棧跟蹤,因爲它包括關於發生問題的關鍵信息。 –
錯誤發生在哪裏?在發生錯誤後查看logcat/Android監視器以確定它是哪一行 – Wilik
您沒有使用Firebase recyclerview適配器的任何特定原因?看看這個https://www.youtube.com/watch?v=2J6spwAVP0M – ElDuderino