#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
, как в этом ответе