Установка и чтение EditText в Kotlin - PullRequest
1 голос
/ 18 марта 2020

У меня есть простая проблема (я надеюсь).

У меня есть два предустановленных значения (IP и порт), которые необходимо изменить пользователю приложения. У меня есть два значения в классе.

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

}

И затем, конечно, val mySettings = SoftOptions ().

Затем я показываю их в своей MainActivity в виде текстовых полей. Затем, нажав кнопку «Настройки», я go перехожу к операции под названием «Настройки». В нем я помещаю значения в поля редактирования, чтобы не пришлось менять весь IP-адрес, если изменяется только последний ди git. Я тоже справился с этим.

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 в порядке.

Итак, мой вопрос состоит в том, что я Я делаю неправильно, чтобы не получить чистое текстовое значение из поля ввода?

Это сообщение в моем пользовательском интерфейсе. И большое спасибо заранее, этот форум является самым мощным из всех, которые я использую.

Мой пользовательский интерфейс

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Чтобы получить текст из текста редактирования, вы должны использовать метод getText () класса edittext, вы можете обратиться к нему для более подробной информации https://developer.android.com/reference/android/widget/EditText#getText ()

getText () будет чем вернуть вам редактируемый файл, к которому необходимо применить метод 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

0 голосов
/ 18 марта 2020

Изменить:

   myTargetPort.toString().toInt()

на:

   myTargetPort.text.toString().toInt()

Сделайте то же самое для всех полей EditText, которые у вас есть.

edittext.toString() возвращает объект по умолчанию # toString () реализация, которая печатает свой адрес как результат, в то время как .text.toString() получает текст в тексте редактирования, как вы хотите

...