データベース(リアルタイムFirebase)から値を取得した後、値を乗算して別の変数に割り当てたいと思います。このようにしようとしましたが、エラーが発生します。誰か助けてくれませんか?
private void getData(final TextView deliCha) {
rootRef.child(appId).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
double Distance = (double) dataSnapshot.child("Distance").getValue();
double charge = Distance*100.0;
deliCha.setText(String.valueOf(charge));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
これはエラーです。
Process: com.example.ketomate, PID: 13156
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Double
at com.example.ketomate.BillDetailsForPaymentAndDelivery$2.onDataChange(BillDetailsForPaymentAndDelivery.java:121)
at com.google.firebase.database.Query$1.onDataChange(Query.java:179)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
データベースの内容を見なくても、「Distance」という子の値は文字列値であり、Doubleではないと結論付けることができます。文字列を単にdoubleにキャストすることはできません。
最初に行うことは、データベースに値を書き込む方法を修正することです。文字列値を書き込む代わりに、最初にそれらをdoubleに変換して、Firestoreがそれらをdoubleとして返すようにします。
それができない場合は、文字列を読み取るときに文字列をdoubleに変換する必要があります。
String distance = dataSnapshot.child("Distance").getValue(String.class);
double doubleDistance = Double.parseDouble(Distance);
double charge = doubleDistance * 100.0;
deliCha.setText(Double.toString(charge));
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加