Приложение вылетает, когда POST использует Okhttp в AlertDialog Kotlin - PullRequest
0 голосов
/ 13 октября 2019

Я создал форму в AlertDialog. Сейчас я пытаюсь опубликовать его, используя Okhttp со всеми заполненными полями, но мое приложение вылетает со следующим сообщением.

Ошибка:

2019-10-12 23:34:27.579 26232-26232/com.kabelash.todolistbboxx E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.kabelash.todolistbboxx, PID: 26232
    java.lang.IllegalStateException: tskName must not be null
        at com.kabelash.todolistbboxx.MainActivity$addNewTask$1.onClick(MainActivity.kt:47)
        at androidx.appcompat.app.AlertController$ButtonHandler.handleMessage(AlertController.java:167)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

Примечание: txtName вообще не равно нулю, когдаотправка формы.

Код для AlertDialog на Kotlin:

val builder = AlertDialog.Builder(this)
        val inflater = layoutInflater
        builder.setTitle(R.string.add_new_task)
        val dialogLayout = inflater.inflate(R.layout.dialog_new_task, null)
        builder.setView(dialogLayout)
        builder.setPositiveButton(R.string.save) { dialogInterface, i ->

            val name = tskName.text.toString().trim()
            val status = tskStatus.text.toString().trim()
            val description = tskDesc.text.toString().trim()
            val expiry_date = tskDate.text.toString().trim()

            val client = OkHttpClient()

            val formBody = FormBody.Builder()
                .add("name", name)
                .add("status", status)
                .add("description", description)
                .add("expiry_date", expiry_date)
                .build()
            val request = Request.Builder()
                .url("https://someurl.com")
                .post(formBody)
                .build()

            try {
                val response = client.newCall(request).execute()

                val body = response.body?.string()
                println(body)
            } catch (e: IOException) {
                e.printStackTrace()
            }


        }
        builder.setNegativeButton(R.string.cancel, null)
        builder.show()

Кто-то Пожалуйста, помогите мне решить его?

1 Ответ

0 голосов
/ 13 октября 2019

Ваш код вообще не показывает, откуда приходит tskName. Похоже, вы используете какую-то инъекцию вида, где tskName - это имя виджета на экране. Если это внедрение представления не сработало должным образом, возможно, оно неправильно нашло запрошенное представление по его идентификатору или представление с этим конкретным идентификатором присутствует в каком-то вашем файле макета, но не раздуто на экране (распространенная проблема при использовании KotlinРасширения Android, которые позволяют просто «импортировать» виджеты по их android:id имени).

...