Hallo all Ich habe dieses Problem gründlich erforscht und ich sah, es gab ein paar Themen auf Stack über dieses Problem, aber keine Antworten. Wenn jemand mir eine Lösung geben kann, würde ich es wirklich schätzen. Hier ist mein Code:Fehler "Objekt vom Typ java.lang.String kann nicht in Typ konvertiert werden"
public class Deliveries extends Fragment {
DatabaseReference dbRef;
FirebaseDatabase myRef;
List<customerInfo>myList;
View delView;
RecyclerView custCards;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
delView = inflater.inflate(R.layout.activity_delivery_card_layout,container,false);
custCards = (RecyclerView)delView.findViewById(R.id.recyclerViewResults);
myRef = FirebaseDatabase.getInstance();
dbRef = myRef.getReference("customers123456");
custCards.setHasFixedSize(true);
custCards.setLayoutManager(new LinearLayoutManager(delView.getContext()));
dbRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
myList = new ArrayList<customerInfo>();
for(DataSnapshot snapshot:dataSnapshot.getChildren()){
customerInfo val = snapshot.getValue(customerInfo.class);
customerInfo customerInfo = new customerInfo();
String nme,id,delType,km;
nme = val.getCustName();
id = val.getCustID();
delType = val.getDeliveryType();
km = val.getKmTravel();
customerInfo.setCustName(nme);
customerInfo.setCustID(id);
customerInfo.setDeliveryType(delType);
customerInfo.setKmTravel(km);
myList.add(customerInfo);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
RecyclerAdapter recyclerAdapter = new RecyclerAdapter(myList,delView.getContext());
custCards.setItemAnimator(new DefaultItemAnimator());
custCards.setAdapter(recyclerAdapter);
return delView;
}
}
die Daten aus Firebase gezogen wird, um eine cardview zu füllen. Hier ist meine recycle Ansicht Adapterklasse:
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.Viewholder> {
Context context;
List<customerInfo> info;
public RecyclerAdapter(List<customerInfo> temp,Context _context){
this.context = _context;
info = temp;
}
@Override
public RecyclerAdapter.Viewholder onCreateViewHolder(ViewGroup parent, int viewType) {
View myView = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_delivery,parent,false);
Viewholder viewholder = new Viewholder(myView);
return viewholder;
}
@Override
public void onBindViewHolder(RecyclerAdapter.Viewholder holder, int position) {
customerInfo myLst = info.get(position);
holder.cName.setText(myLst.getCustName());
holder.cID.setText(myLst.getCustID());
holder.cDel.setText(myLst.getDeliveryType());
holder.cKm.setText(myLst.getKmTravel());
}
@Override
public int getItemCount() {
return 0;
}
public class Viewholder extends RecyclerView.ViewHolder{
public TextView cName;
public TextView cID;
public TextView cDel;
public TextView cKm;
public Viewholder(View item){
super(item);
cName = (TextView)item.findViewById(R.id.txtvwCustNme);
cID = (TextView)item.findViewById(R.id.txtvwCustID);
cDel = (TextView)item.findViewById(R.id.txtvwDelType);
cKm = (TextView)item.findViewById(R.id.txtvwEstKm);
}
}
}
und dies ist meine Kunden Informationen Klasse:
public class customerInfo {
public String custName;
public String custID;
public String deliveryType;
public String kmTravel;
public String getCustID() {
return custID;
}
public void setCustID(String custID) {
this.custID = custID;
}
public String getKmTravel() {
return kmTravel;
}
public String getCustName() {
return custName;
}
public String getDeliveryType() {
return deliveryType;
}
public void setCustName(String custName) {
this.custName = custName;
}
public void setDeliveryType(String deliveryType) {
this.deliveryType = deliveryType;
}
public void setKmTravel(String kmTravel) {
this.kmTravel = kmTravel;
}
}
Wie ich schon sagte, bevor ich dieses Problem zu lösen versucht haben, von bei früheren Probleme suchen, waren gepostet auf Stack, aber kein Glück. Ich habe eine andere Klasse, wo es von Feuerbasis zieht und es funktioniert perfekt, der Unterschied zwischen den beiden Klassen ist dies:
Lieferungen Klasse (Doesnt Arbeit):
customerInfo val = snapshot.getValue(customerInfo.class);
Startseite Klasse (Werke):
myData.add(snapshot.getValue(String.class));
meine genauen Fehler aus dem android-Monitor:
FATAL EXCEPTION: main
Process: com.example.anthe.question2, PID: 4947
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.anthe.question2.customerInfo
at com.google.android.gms.internal.zzbtg.zze(Unknown Source)
at com.google.android.gms.internal.zzbtg.zzb(Unknown Source)
at com.google.android.gms.internal.zzbtg.zza(Unknown Source)
at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
at com.example.anthe.question2.Deliveries$1.onDataChange(Deliveries.java:44)
at com.google.android.gms.internal.zzbpx.zza(Unknown Source)
at com.google.android.gms.internal.zzbqx.zzZV(Unknown Source)
at com.google.android.gms.internal.zzbra$1.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6692)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
die Datenbank stru cture: db structure
Gießfehler. Debuggen Sie Ihren Code. – ADM
versuchte Debugging. Es hat nicht funktioniert. –
Debugging wird nicht funktionieren. Es wird Sie den Fehler finden. Überprüfen Sie den Objekttyp in der Zeilennummer, an der Sie die Ausnahme erhalten. Sie übergeben eine Zeichenfolge an ein Concrete-Klassenobjekt. – ADM