package com.example.acer.test
import android.content.Context
import android.content.SharedPreferences
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
private var sharedP: SharedPreferences? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn_add.setOnClickListener {
sharedP = getSharedPreferences("addData", Context.MODE_PRIVATE)
var myEditor = sharedP?.edit()
myEditor?.putString("product_name" , et_productname.text.toString())
myEditor?.commit()
Toast.makeText(this@MainActivity, "The product is saved" , Toast.LENGTH_SHORT).show()
}
btn_get.setOnClickListener {
et_getproduct.text = sharedP?.getString("product_name","null")
}
}
}
我需要从Kotlin中的共享首选项中读取一个字符串,但是它显示以下错误:错误:(29,34)类型不匹配:推断的类型是String?但可编辑!是预期的
答案 0 :(得分:0)
此行使您的代码无法运行。
et_getproduct.text = sharedP?.getString("product_name","null")
在Android中为EditText
设置文本。
btn_get.setOnClickListener {
val productName = sharedP?.getString("product_name", "null") ?: "null"
et_getproduct.setText(productName)
}
答案 1 :(得分:0)
您可以创建如下扩展方法:
fun String.toEditable(): Editable = Editable.Factory.getInstance().newEditable(this)
然后像这样更改代码:
btn_get.setOnClickListener {
et_getproduct.text = sharedP?.getString("product_name","null").toEditable()
}
这是我使用的,效果很好