错误:(29,34)类型不匹配:推断的类型是String?但可编辑!预期

时间:2019-02-23 10:43:34

标签: android kotlin

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?但可编辑!是预期的

2 个答案:

答案 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()
        }

这是我使用的,效果很好