Почему я получаю «Вызванное: java.lang.ClassCastException: java.lang.Float не может быть приведен к java.lang.Ошибка String» здесь?

#android #kotlin

#Android #kotlin

Вопрос:

Я использую Android с kotlin и получаю эту ошибку.

Вызвано: java.lang.ClassCastException: java.lang.Float не может быть приведен к java.lang.Строка в строке 60

Начнем с того, что я не понимаю, почему он думает, что существует Float . Вот строка 60:

 val bal:String = sp.getString("Balance", "0.00")!!.toString()
  

где sp является экземпляром SharedPreferences .

Вот мой полный код:

 package com.applications.darshan.piggybank

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.content.SharedPreferences
import android.view.View
import android.widget.EditText
import android.widget.TextView

class MainActivity : AppCompatActivity() {
private var balance : TextView ?= null
private var amount : EditText ?= null


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    balance = findViewById(R.id.balance)
    amount = findViewById(R.id.amount)
    var sp:SharedPreferences = this.getSharedPreferences("Balance", 0)
    addZero()
    balance!!.text = "Your balance is $"   sp.getString("Balance", "0.00")

}
fun onClick(v: View){
    var addAmount:Float ?
    try{
        addAmount = amount!!.text.toString().toFloat()
    }catch(e:Exception){
        addAmount = 0.00f
    }

    var sp:SharedPreferences = this.getSharedPreferences("Balance", 0)
    val editor = sp.edit()
    var amountNum = sp.getString("Balance", "0.00").toFloat()
    when(v.id.toString()){
        "2131165209" -> amountNum  = addAmount!!
        "2131165314" -> amountNum -= addAmount!!
    }
    editor.putString("Balance", amountNum.toString())
    editor.apply()
    editor.commit()
    addZero()
    balance!!.text = "Your balance is $"   sp.getString("Balance", "0.00")

}
fun clearBalance(v:View){
    var sp:SharedPreferences = this.getSharedPreferences("Balance", 0)
    val editor = sp.edit()
    editor.putString("Balance",  "0.00")
    editor.apply()
    editor.commit()
    addZero()
    balance!!.text = "Your balance is $"   sp.getString("Balance", "0.00")
    addZero()

}
fun addZero(){
    val sp:SharedPreferences = this.getSharedPreferences("Balance", 0)
    val bal:String = sp.getString("Balance", "0.00")!!.toString()
    val editor = sp.edit()
    val balLen = bal.length
    val dot:Char = bal[balLen-2]
    if(dot.equals('.')){
        System.out.println(true)
        var x:String = bal   "0"
        editor.putString("Balance", x)
        System.out.println(x)
        editor.apply()
        editor.commit()
    }
}
}
  

Комментарии:

1.Вы вставили в SharedPreferences float и получаете String . Вам нужно будет получить float от SharedPreferences .

Ответ №1:

Попробуйте получить float от вашего sp и преобразовать его в String после

 val bal:String = Float.toString(sp.getFloat("Balance", 0.0f));
  

Комментарии:

1. Почему невозможно просто «сбалансировать» строку вместо float

Ответ №2:

Вы можете использовать следующее, которое будет приведено к Float

 Float.valueOf(sp.getString("Balance", "0.00"));
  

Комментарии:

1. Я хочу, чтобы это была строка, а не float

2. @DarshanKrishnaswamy, Ну, вы вставили float значение в String SharedPreference здесь var amountNum = sp.getString("Balance", "0.00").toFloat() , тогда editor.putString("Balance", amountNum.toString()) в соответствии с этим вам нужно будет получить String из SharedPreference , а затем ввести тип в float , как в этом ответе