在Kotlin设置和阅读EditText



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

我有两个预设值(IP和端口(,我需要应用程序用户能够更改。我在一个类中有两个值。

public class SoftOptions {
var RemoteHost: String = "192.168.43.237"
var RemotePort: Int = 1234
}

当然还有val mySettings=SoftOptions((。

然后,我在MainActivity中将它们显示为文本字段。然后,按下"设置"按钮,我进入一个名为"设置"的活动。在它中,我将值放在编辑框中,这样,如果只有最后一位数字发生更改,就不必更改整个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.RRemotePort变量。

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值很好。

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

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

我的用户界面

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

getText((将返回Editable,您必须对其应用toString((方法,该方法将为您提供字符串中的editext文本。

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

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

更改:

myTargetPort.toString().toInt()

至:

myTargetPort.text.toString().toInt()

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

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

相关内容

  • 没有找到相关文章

最新更新