首页 > 解决方案 > 访问 EditText ID 数据返回 Null

问题描述

我是 Android Kotlin 的新手,我无法访问我在 xml 中为 input_mtk ID 输入的值,它总是在 Kotlin 文件上返回 null。这是我的代码

XML 文件

<TextView
        android:id="@+id/matematika"
        android:layout_width="wrap_content"
        android:layout_height="19dp"
        android:layout_marginStart="56dp"
        android:layout_marginTop="20dp"
        android:gravity="center_horizontal|top"
        android:text="@string/matematika"
        android:textAppearance="@style/string_form"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/input_bahasa_inggris" />

    <EditText
        android:id="@+id/input_mtk"
        style="@style/shape2"
        android:layout_marginStart="56dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="230dp"
        android:inputType="numberDecimal"
        android:maxLength="5"
        android:textAlignment="center"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/matematika" />

科特林文件

class ResultFragment : Fragment() {

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

        return inflater.inflate(R.layout.fragment_result, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        getData()
    }

    fun getData() {
        var Mat = input_mtk.text.toString()
        Log.e("test", Mat)
    }
}

它显示了这个错误

java.lang.NullPointerException: input_mtk must not be null
        at com.xx.xx.ResultFragment.getData(ResultFragment.kt:38)
        at com.xx.xx.ResultFragment.onViewCreated(ResultFragment.kt:33)

如果我 var Mat = input_mtk.text.toString() 改为 var Mat = input_mtk?.text.toString()

清楚地表明 input_mtk id 返回 null 2021-08-29 16:49:22.158 15887-15887/com.xx.xx E/test: null

标签: androidkotlinkotlin-android-extensions

解决方案


input_mtk.textonViewCreated()如果 Kotlin 合成导入或视图绑定未正确完成,则可以为 null 。onViewCreated()此外,在完成执行之前,您可能不会在 EditText 中输入任何内容

把它放在一个按钮的点击监听器中:

<Button
        android:id="@+id/my_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

然后在你的 Kotlin 类中,访问它:

var input = ""
my_button.setOnClickListener {
 input = input_mtk.text.toString()
}

这里input将保存来自您的 EditText 的字符串

注意:我假设您使用的是 Kotlin 合成器。如果是,建议迁移到 View Bindings - https://developer.android.com/topic/libraries/view-binding/migration


推荐阅读