See, I am trying to get these data from firebase using a model class. And also to display these data in real time even if the data changes. However, I am currently stuck with this error.
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.codeworm.barkapp.m_Model.LocationModel
at com.google.android.gms.internal.zzelw.zzb(Unknown Source)
at com.google.android.gms.internal.zzelw.zza(Unknown Source)
at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
at com.codeworm.barkapp.m_FireBase.FirebaseHelper.fetchData(FirebaseHelper.java:64)
at com.codeworm.barkapp.m_FireBase.FirebaseHelper.access$000(FirebaseHelper.java:20)
at com.codeworm.barkapp.m_FireBase.FirebaseHelper$1.onChildAdded(FirebaseHelper.java:77)
at com.google.android.gms.internal.zzecw.zza(Unknown Source)
at com.google.android.gms.internal.zzeia.zzbyc(Unknown Source)
at com.google.android.gms.internal.zzeig.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5930)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
image attached below is my database structure My firebase structure (UPDATED)
Here is my Model class
public class LocationModel {
Long lat,lng,ratio,total_slot;
String name;
public LocationModel(){
}
public Long getLat(){return lat;}
public void setLat(){this.lat=lat;}
public Long getLng(){return lng;}
public void setLng(){this.lng=lng;}
public Long getRatio(){ return ratio;}
public void setRatio(Long ratio){this.ratio = ratio;}
public Long getTotalSlot(){ return total_slot;}
public void setTotalSlot(Long total_slot){this.total_slot = total_slot;}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
My helper class
public FirebaseHelper(DatabaseReference db) {
this.db = db;
}
//IMPLEMENT FETCH DATA AND FILL ARRAYLIST
private void fetchData(DataSnapshot dataSnapshot)
{
locationModels.clear();
for (DataSnapshot ds : dataSnapshot.getChildren())
{
LocationModel locationModel=ds.getValue(LocationModel.class);
locationModels.add(locationModel);
}
}
//RETRIEVE
public ArrayList<LocationModel> retrieve()
{
db.child("locs").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
fetchData(dataSnapshot);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
fetchData(dataSnapshot);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return locationModels;
}
My adapter
public class ParkingListAdapter extends BaseAdapter {
Context c;
ArrayList<LocationModel> locationModels;
public ParkingListAdapter(Context c, ArrayList<LocationModel> locationModels) {
this.c = c;
this.locationModels = locationModels;
}
@Override
public int getCount() {
return locationModels.size();
}
@Override
public Object getItem(int position) {
return locationModels.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView==null)
{
convertView= LayoutInflater.from(c).inflate(R.layout.model,parent,false);
}
TextView nameTxt= (TextView) convertView.findViewById(R.id.nameTxt);
TextView ratioTxt= (TextView) convertView.findViewById(R.id.ratioTxt);
TextView totalTxt= (TextView) convertView.findViewById(R.id.totalTxt);
final LocationModel s= (LocationModel) this.getItem(position);
nameTxt.setText(s.getName());
ratioTxt.setText(String.valueOf(s.getRatio()));
totalTxt.setText(String.valueOf(s.getTotalSlot()));
//ONITECLICK
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(c,s.getName(),Toast.LENGTH_SHORT).show();
}
});
return convertView;
}
}
and finally my activity
//INITIALIZE FIREBASE DB
db = FirebaseDatabase.getInstance().getReference();
helper = new FirebaseHelper(db);
//ADAPTER
adapter = new ParkingListAdapter(this, helper.retrieve());
lv.setAdapter(adapter);
adapter.notifyDataSetChanged();
db.child("locs").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
adapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
adapter.notifyDataSetChanged();
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
I really don't get why this error keeps on showing. If anyone can help me with this error it would mean so much please.