la base de données.DatabaseException: impossible de convertir un objet de type java.lang.Chaîne de type
Mon Problème
08-10 04:23:28.820 21501-21501/my.org.medicare.medicareapp E/AndroidRuntime: FATAL EXCEPTION: main Process: my.org.medicare.medicareapp, PID: 21501 com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type my.org.medicare.medicareapp.protest
at com.google.android.gms.internal.zzaln.zzd(Unknown Source)
at com.google.android.gms.internal.zzaln.zzb(Unknown Source)
at com.google.android.gms.internal.zzaln.zza(Unknown Source)
at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
at my.org.medicare.medicareapp.FirebaseHelper.fetchData(FirebaseHelper.java:50)
at my.org.medicare.medicareapp.FirebaseHelper.access$000(FirebaseHelper.java:14) atmy.org.medicare.medicareapp.FirebaseHelper$1.onChildAdded(FirebaseHelper.java60)at com.google.android.gms.internal.zzahe.zza(Unknown Source) at com.google.android.gms.internal.zzaje.zzcta(Unknown Source) at com.google.android.gms.internal.zzajh$1.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:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Mon Activité Principale Code:
rv = (RecyclerView) findViewById(R.id.rv);
rv.setLayoutManager(new LinearLayoutManager(this));
//INITIALIZE FIREBASE DB
db = FirebaseDatabase.getInstance().getReference().child("Pro");;
helper = new FirebaseHelper(db);
//ADAPTER
adapter = new MyAdapter(this, helper.retrieve());
rv.setAdapter(adapter);
Et mon FirebaseHelper:
public class FirebaseHelper {
DatabaseReference db;
Boolean saved=null;
ArrayList<protest> spacecrafts=new ArrayList<>();
public FirebaseHelper(DatabaseReference db) {
this.db = db;
}
//WRITE IF NOT NULL
public Boolean save(protest spacecraft)
{
if(spacecraft==null)
{
saved=false;
}else
{
try
{
db.child("Pro").push().setValue(spacecraft);
saved=true;
}catch (DatabaseException e)
{
e.printStackTrace();
saved=false;
}
}
return saved;
}
//IMPLEMENT FETCH DATA AND FILL ARRAYLIST
private void fetchData(DataSnapshot dataSnapshot)
{
spacecrafts.clear();
//dataSnapshot.getChildren()
for (DataSnapshot ds : dataSnapshot.getChildren())
{
protest spacecraft=ds.getValue(protest.class);
spacecrafts.add(spacecraft);
}
}
//READ THEN RETURN ARRAYLIST
public ArrayList<protest> retrieve() {
db.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 spacecrafts;
}
}
Mon point de vue Titulaire
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView nameTxt,propTxt,descTxt;
ItemClickListener itemClickListener;
public MyViewHolder(View itemView) {
super(itemView);
nameTxt= (TextView) itemView.findViewById(R.id.nameTxt);
propTxt= (TextView) itemView.findViewById(R.id.propellantTxt);
descTxt= (TextView) itemView.findViewById(R.id.descTxt);
itemView.setOnClickListener(this);
}
public void setItemClickListener(ItemClickListener itemClickListener)
{
this.itemClickListener=itemClickListener;
}
@Override
public void onClick(View view) {
this.itemClickListener.onItemClick(this.getLayoutPosition());
}
Ci-dessous est ma structure de données, j'essaie de lire "Pro"
Ma Protestation structure:
public class protest {
private String name;
private String contact;
private String centre;
public protest(){};
public String getName(){return name;}
public String getContact(){return contact;}
public String getCentre(){return centre;}
public void setName(String name) {
this.name = name;
}
public void setContact(String contact) {
this.contact = contact;
}
public void setCentre(String centre) {
this.centre = centre;
}
}
Pourrais-je savoir quel est le problème? Je suis nouveau sur firebase et j'ai besoin de votre aide. J'ai lu quelques question similaire ici, mais je n'arrive toujours pas à résoudre mon problème. Peut-expert ici m'aider?
Mise à jour:
Testé à nouveau avec impression..
lorsque Datasnapshot aller à
public ArrayList<protest> retrieve() {
db.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
System.out.println(dataSnapshot.getValue());
fetchData(dataSnapshot);
}
08-10 06:26:47.548 26700-26700/ma.org.l'assurance-maladie.medicareapp j'/Système.: {nom=lee, contact=123456, centre=jalan ipoh}
Mais quand Datasnapshot aller à
private void fetchData(DataSnapshot dataSnapshot)
{
spacecrafts.clear();
//dataSnapshot.getChildren()
for (DataSnapshot ds : dataSnapshot.getChildren())
{
System.out.println(ds.getValue());
protest spacecraft=ds.getValue(protest.class);
spacecrafts.add(spacecraft);
}
}
08-10 06:26:47.548 26700-26700/ma.org.l'assurance-maladie.medicareapp j'/Système.: jalan ipoh
Quel est le problème?
Le foin c'est Firebase com.google.firebase.la base de données.DatabaseException Exception donc, essayez de balise de Firebase
Chers USKMobility - 08-10 06:13:56.794 21719-21719/ma.org.l'assurance-maladie.medicareapp j'/Système.: {nom=lee, contact=123456, centre=jalan ipoh} Le retour de l'Objet
dans quelle ligne l'exception se produire?
DataSnapshot changement de valeur de {nom=lee, contact=123456, centre=jalan ipoh} à jalan ipoh. quand je l'appelle fetchData fonction. Je ne comprends pas pourquoi modification de données
OriginalL'auteur jeff | 2016-08-10
Vous devez vous connecter pour publier un commentaire.
Votre
fetchData
fonction reçoit déjàDataSnapshot
comme un noeud enfant, mais même ici, vous avez encore de la boucle à travers les enfants qui seront effectivement en boucle par le biais de clés individuelles (name
,contact
,centre
).Vous devez simplement appeler
getValue
surDataSnaphot
sans boucle:J'espère que cette aide.
Super, je suis content d'avoir pu aider. S'il vous plaît voter la réponse si vous l'avez trouvé utile.
merci, ça m'a aidé deux fois.
Je suis content que vous avez trouvé utile ainsi - c'était en effet un intéressant "problème" à résoudre.
cela a aidé beaucoup. si j'étais de l'interrogation des cinq éléments de mon firebase base de données, sera
onChildAdded()
être appelé une fois ou cinq fois?OriginalL'auteur ishmaelMakitla
Le plus probable c'est votre problème, dans votre
fetchData
méthode:J'espère que cette aide.
protest
est une Classe?Grâce cipley, j'ai eu la réponse ...merci
la bonne réponse. si j'étais de l'interrogation des cinq éléments de mon firebase base de données, sera
onChildAdded()
être appelé une fois ou cinq fois?OriginalL'auteur cipley