java.lang.ClassCastException: java.lang.String 无法转换为 java.lang.Double
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Double
我想在从数据库(实时 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.onDataChange(BillDetailsForPaymentAndDelivery.java:121)
at com.google.firebase.database.Query.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.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)
你可以使用Double.valueOf
方法
double Distance = Double.valueOf (dataSnapshot.child("Distance").getValue());
在没有看到您的数据库内容的情况下,我只能得出结论,名为“Distance”的子项的值是一个字符串值,而不是 Double。您不能只将字符串转换为双精度数。
首先要做的是修复将值写入数据库的方式。不要写入字符串值,而是先将它们转换为双精度值,以便 Firestore 将 return 它们作为双精度值提供给您。
如果不能这样做,则在读取时必须将 String 转换为 double。
String distance = dataSnapshot.child("Distance").getValue(String.class);
double doubleDistance = Double.parseDouble(Distance);
double charge = doubleDistance * 100.0;
deliCha.setText(Double.toString(charge));
"6.016539 Kilometers" 字符串无法转换为 double,因为它包含单词 Kilometers。首先,您需要在转换为 double 之前删除 Kilometers 一词。
private void getData(final TextView deliCha) {
rootRef.child(appId).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String distance = dataSnapshot.child("Distance").getValue();
String[] separate = distance.split("Kilometers");
double d = Double.parseDouble(separate[0]);
double charge = d*100.0;
deliCha.setText(String.valueOf(charge));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
我想在从数据库(实时 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.onDataChange(BillDetailsForPaymentAndDelivery.java:121)
at com.google.firebase.database.Query.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.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)
你可以使用Double.valueOf
方法
double Distance = Double.valueOf (dataSnapshot.child("Distance").getValue());
在没有看到您的数据库内容的情况下,我只能得出结论,名为“Distance”的子项的值是一个字符串值,而不是 Double。您不能只将字符串转换为双精度数。
首先要做的是修复将值写入数据库的方式。不要写入字符串值,而是先将它们转换为双精度值,以便 Firestore 将 return 它们作为双精度值提供给您。
如果不能这样做,则在读取时必须将 String 转换为 double。
String distance = dataSnapshot.child("Distance").getValue(String.class);
double doubleDistance = Double.parseDouble(Distance);
double charge = doubleDistance * 100.0;
deliCha.setText(Double.toString(charge));
"6.016539 Kilometers" 字符串无法转换为 double,因为它包含单词 Kilometers。首先,您需要在转换为 double 之前删除 Kilometers 一词。
private void getData(final TextView deliCha) {
rootRef.child(appId).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String distance = dataSnapshot.child("Distance").getValue();
String[] separate = distance.split("Kilometers");
double d = Double.parseDouble(separate[0]);
double charge = d*100.0;
deliCha.setText(String.valueOf(charge));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}