【问题标题】:Android TextView Showing Fatal Error in KotlinAndroid TextView 在 Kotlin 中显示致命错误
【发布时间】:2021-01-10 17:55:48
【问题描述】:

我正在尝试在 Kotlin 中初始化 TextView,如下所示

val textSelectedFood = findViewById<TextView>(R.id.textSelectedFood) as TextView

我也试过了

val textSelectedFood: TextView = findViewById<TextView>(R.id.textSelectedFood) as TextView

还有这个

val textSelectedFood: TextView = findViewById(R.id.textSelectedFood) as TextView

还有这个

val textSelectedFood: TextView = findViewById<TextView>(R.id.textSelectedFood)

但仍然出现以下错误。不知道为什么

2021-01-10 23:38:26.640 29636-29636/com.imran.android.dinnerdecider E/d.dinnerdecide: Unknown bits set in runtime_flags: 0x8000
2021-01-10 23:38:27.091 29636-29636/com.imran.android.dinnerdecider E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.imran.android.dinnerdecider, PID: 29636
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.imran.android.dinnerdecider/com.imran.android.dinnerdecider.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3194)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
        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)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
        at android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:163)
        at android.view.ContextThemeWrapper.getTheme(ContextThemeWrapper.java:174)
        at android.content.Context.obtainStyledAttributes(Context.java:738)
        at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:839)
        at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:806)
        at androidx.appcompat.app.AppCompatDelegateImpl.findViewById(AppCompatDelegateImpl.java:630)
        at androidx.appcompat.app.AppCompatActivity.findViewById(AppCompatActivity.java:223)
        at com.imran.android.dinnerdecider.MainActivity.<init>(MainActivity.kt:12)
        at java.lang.Class.newInstance(Native Method)
        at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
        at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:45)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1243)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3182)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) 
        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) 

【问题讨论】:

标签: android kotlin textview


【解决方案1】:

我从this问题中得到了提示。

但代码在一年中发生了很大变化。

这就是为什么我在下面编写解决我的问题的当前解决方案代码。

private lateinit var textSelectedFood: TextView // withoud lateinit code will show error

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    textSelectedFood = findViewById(R.id.textSelectedFood)
}

【讨论】:

    【解决方案2】:

    如果您不必“findViewById”有很多更好更安全的选择:

    1.synthetic(已弃用

    直接在您的代码中调用视图。

    2.视图绑定

    欲了解更多信息,请查看此链接:https://developer.android.com/topic/libraries/view-binding

    【讨论】:

      【解决方案3】:

      这种技术现在已经过时了,只需使用“View binding”。 或者你可以通过它的 id 来调用视图,就是这样。 在你的情况下:

      textSelectedFood.text = "Example of doing something"
      

      【讨论】:

      • 这显示错误。原因 import kotlinx.android.synthetic.main.activity_main.* 现在已经贬值了。你能提供完整的可运行代码吗?带进口
      • 它已经被贬值了,但你仍然可以使用它直到 2021 年 9 月,如果你想使用视图绑定查看这个视频,它很容易理解并且很有帮助:youtube.com/watch?v=MXZz438aCDM&ab_channel=Stevdza-San
      • 这是 2020 年 12 月 4 日的视频。现在,在更新的 kotlin sdk 中,我找不到它。
      猜你喜欢
      • 2020-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多