【问题标题】:App crashes when POST using Okhttp in AlertDialog Kotlin在 AlertDialog Kotlin 中使用 Okhttp POST 时应用程序崩溃
【发布时间】:2020-02-10 00:59:44
【问题描述】:

我在 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 不为空。

Kotlin 中的 AlertDialog 代码:

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()

有人请帮我解决一下吗?

【问题讨论】:

    标签: android json kotlin android-alertdialog okhttp


    【解决方案1】:

    您的代码根本没有显示tskName 的来源。看起来您正在使用某种视图注入,其中tskName 是屏幕上小部件的名称。如果这个视图注入不能正常工作,它可能没有通过它的 ID 正确找到请求的视图,或者具有该特定 ID 的视图存在于您的某些布局文件中,但没有在屏幕上膨胀(使用 Kotlin 时的常见问题Android 扩展,允许您通过 android:id 名称简单地“导入”小部件。

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 2017-01-12
      • 2018-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 2023-03-25
      • 2022-01-24
      相关资源
      最近更新 更多