簡體   English   中英

java.lang.ClassCastException:java.lang.String 無法轉換為 java.lang.Double

[英]java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Double

我想在從數據庫(realtime 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)

您可以使用Double.valueOf方法

double Distance = Double.valueOf (dataSnapshot.child("Distance").getValue());

“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) {

        }
    });
}

在沒有看到您的數據庫內容的情況下,我只能得出結論,名為“Distance”的子項的值是一個字符串值,而不是 Double。 您不能只將字符串轉換為雙精度數。

要做的第一件事是修復將值寫入數據庫的方式。 不要寫入字符串值,而是先將它們轉換為雙精度值,以便 Firestore 將它們作為雙精度值返回給您。

如果您不能這樣做,則在讀取時必須將 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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM