在 Kotlin 中设置和读取 EditText

Setting and reading an EditText in Kotlin

我有一个简单的问题(我希望)。

我有两个预设值(IP 和端口)需要应用程序用户能够更改。我在 class.

中有两个值
public class SoftOptions {
    var RemoteHost: String = "192.168.43.237"
    var RemotePort: Int = 1234

}

然后当然是 val mySettings = SoftOptions()。

然后我将它们显示在我的 MainActivity 中作为文本字段。然后,在按下“设置”按钮后,我转到名为“设置”的 activity。在其中,我将值放在编辑框中,这样如果只有最后一位数字发生变化,就不必更改整个 IP 地址。这个我也搞定了。

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    var editEnterip =  mySettings.RemoteHost
    var editEnterport= mySettings.RemotePort
    setContentView(R.layout.activity_settings)
    this.editEnterip.setText(mySettings.RemoteHost.toString())
    this.editEnterport.setText(mySettings.RemotePort.toString())

但是,在按钮侦听器中,我只需要读取新值并将其分配给 mySettings.RemoteHost 和 mySettings.RemotePort 变量。

   btnSetip.setOnClickListener {
        var finalIP  =findViewById<EditText>(R.id.editEnterip)
        Toast.makeText(this, finalIP.toString(), Toast.LENGTH_SHORT).show()
        myTargetIP = finalIP.toString()
        mySettings.RemoteHost = finalIP.toString()

        editEnterport =  editEnterport .  toString () .toInt()
        myTargetPort = "$editEnterport"
        mySettings.RemotePort = myTargetPort.toString().toInt()
        val intent = Intent(this, MainActivity::class.java)
        intent.putExtra("myTargetIP", myTargetPort)
        intent.putExtra("myTargetPort", myTargetPort)
        startActivity(intent)
    }

但是,这虽然不会导致应用程序崩溃,但会将可怕的错误消息作为远程主机的值,即使编辑后的 ​​IP 值没问题。

所以,我的问题只是,我做错了什么,没有从编辑框中获取干净的文本值?

这是我的用户界面中的消息。非常感谢,这个论坛是我使用过的最强大的论坛。

My user interface

变化:

   myTargetPort.toString().toInt()

至:

   myTargetPort.text.toString().toInt()

对您拥有的所有 EditText 字段执行相同的操作。

edittext.toString() returns 默认的 Object#toString() 实现打印其地址作为结果,而 .text.toString() 根据需要获取编辑文本中的文本

为了从 edittext 中获取文本,您必须使用 edittext 的 getText() 方法 class 您可以参考此以获取更多详细信息 https://developer.android.com/reference/android/widget/EditText#getText()

getText() 将比 return 您必须应用 toString() 方法的 Editable,该方法将为您提供字符串中的编辑文本文本。

考虑到您的问题代码,您可以通过以下方式获取它

var finalIP =findViewById<EditText>(R.id.editEnterip)
var textFromEditText = finalIP.text.toString() // access text this way
println(textFromEditText)

由于您使用的是 kotlin,因此无需编写完整的 getText(),这要归功于它的 属性 访问语法,您可以参考此处了解更多详细信息 https://kotlinlang.org/docs/reference/properties.html