valueEventListener
を呼び出すことから得たdatasnapshotの解析に問題があります。 データベースを照会するときに、特定の理由でchildEventListener
の代わりに使用することを選択しました。 、コードは完璧に動作し、私は1人のトレーナーを照会するときdatasnapshot firebaseの子供のデータ型を見つけよう
public Trainer(DataSnapshot dataSnapshot)
{
for(DataSnapshot snapshot: dataSnapshot.getChildren())
{
Trainer trainer = snapshot.getValue(Trainer.class);
name = trainer.name;
civilNo = trainer.civilNo;
email = trainer.email;
age = trainer.age;
phone = trainer.phone;
gender = trainer.gender;
password = trainer.password;
carNo = trainer.carNo;
places = trainer.places;
vehicleType = trainer.vehicleType;
languages = trainer.languages;
rate = trainer.rate;
price = trainer.price;
contractType = trainer.contractType;
spokenLanguage = trainer.spokenLanguage;
trainingAreas=trainer.trainingAreas;
hourPrice=trainer.hourPrice;
contractPrice=trainer.contractPrice;
trainingTime=trainer.trainingTime;
key = snapshot.getRef().getKey();
}
}
すべてが順調と良いです:
は今、私はdatasnapshotパラメータは、私がvalueEventListener
からもらったdatasnapshotを渡す次のコンストラクタを使用して、このクラスを持っています。
public class Trainers {
private ArrayList<Trainer> trainers;
public Trainers()
{
// Empty default constructor
}
public Trainers(DataSnapshot dataSnapshot)
{
trainers = new ArrayList<>();
for(DataSnapshot snapshot: dataSnapshot.getChildren())
trainers.add(new Trainer(snapshot));
}
public ArrayList<Trainer> getTrainers() {
return trainers;
}
public void setTrainers(ArrayList<Trainer> trainers) {
this.trainers = trainers;
}
}
エラーが発生し、変換エラーが発生したことを私に語った:
致命的な例外:メインプロセス: worldontheotherside.wordpress.com私はリストを取得しようとすると問題があります。 drvingapp、PID:16835 com.google.firebase.database.DatabaseException:java.lang.Lタイプの オブジェクトを com.google.android.gms.internal.zzekh.zzb(不明な情報源)に変換できません at com.google.android.gms.internal.zzekh.zza(不明な情報源) a t com.google.firebase.database.DataSnapshot.getValue(Unknown Source) at otherside.wordpress.com.drvingapp.Classes.Trainer(Trainer.java:4 at worldontheotherside.wordpress.com.drvingapp.Classes.Trainers。 (Trainers.java at worldsideheotherside.wordpress.com.drvingapp.TrainersActivity $ 1.onDataChange(列車 com.google.android.gms.internal.zzeeq.zza(不明な情報源) com.google.android.gms.internal .zzegl.zzbwe(不明な情報源) com.google.android.gms.internal.zzegr.run(不明な情報源) android.os.Handler.handleCallback(Handler.java:751) android.os.Handler .dispatchMessage(Handler.java:95) とandroid.os.Looper.loop(Looper.java:154) とandroid.app.Activ ityThread.main(ActivityThread.java:6692) at java.lang.reflect.Method.invoke(ネイティブメソッド) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1468) at com .android.internal.os.ZygoteInit.main com.android.internal.os.ZygoteInit.mainで(ZygoteInit.java:1358) (ZygoteInit.java:1358)
私はこの問題を追跡、および結論その問題は、私がTrainerクラス(私にリストを取得するクラス)にdatasnapshotを渡したとき、私は元のセットにあった各datasnapshotの子を取って、もう一度それをTrainerクラスに渡したからです単一のトレーナーのデータと一緒に)。
ここでは、渡されたdatasnapshotの子を取得するforループがあります。この場合、単一のトレーナー(username、civilNoなど)の実際の値です。トレーナークラスにキャストされました。
私が求めている何:私は渡されたdatasnapshotの子供が他のdatasnapshotsまたは実際の値であるかどうかを決定すると考え、そして実行するために、それに基づいて、if文を使用し
正確な分析ができましたが、どうすればいいのかわかりません。手伝って頂けますか?あなたのトレーナークラスで
ありがとう!あなたは私を救いました。 –