非空 android 视图上的 java.lang.NullPointerException

Posted

技术标签:

【中文标题】非空 android 视图上的 java.lang.NullPointerException【英文标题】:java.lang.NullPointerException on non-null android view 【发布时间】:2021-11-18 04:43:16 【问题描述】:

我正在尝试将一些 api 结果输入到 android studio 中的布局中,但是当它不是时,我在视图上得到一个 java.lang.NullPointerException。这是我的代码:

AsyncTask.execute 
    var related = gson.fromJson(AnibaseApi().getAnimeRelated(anime.id), Array<AnimeResponseObject>::class.java)

    println(related) // First sysyem.out

    for (r in related) 
        runOnUiThread 
            var elem = if (r.english != "") 
                AnimeVerticalObject(this).set(
                    r.english,
                    r.image
                ).build() // returns LinearLayout
             else 
                AnimeVerticalObject(this).set(
                    r.title,
                    r.image
                ).build() // returns LinearLayout
            
            println(elem) // second system.out
            relatedLayout.addView(elem!!) // Line 110

            var space = Space(this)
            space.layoutParams = LinearLayout.LayoutParams(
                10.toDp(),
                LinearLayout.LayoutParams.MATCH_PARENT
            )
            relatedLayout.addView(space)
        
    

注意Int.toDp() 返回一个Int。我的日志说视图不是空的,因为它可以在打印时看到。

I/System.out: [Lcom.my.package.utils.AnimeResponseObject;@4f30821 
I/System.out: android.widget.LinearLayout8ee2334 V.E...... ......I. 0,0-0,0
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.my.package, PID: 465
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.LinearLayout.addView(android.view.View)' on a null object reference
        at com.my.package.AnimeActivity2.onCreate$lambda-2$lambda-1(AnimeActivity2.kt:110)
        at com.my.package.AnimeActivity2.$r8$lambda$HrayXNmY3lD16wB92hio1CE3OxE(Unknown Source:0)
        at com.my.package.AnimeActivity2$$ExternalSyntheticLambda1.run(Unknown Source:4)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:250)
        at android.app.ActivityThread.main(ActivityThread.java:7851)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)

所以现在,我不明白为什么,如果我的视图不为空(具有非空验证器),它仍然会引发此异常。有什么想法吗?

【问题讨论】:

relatedLayout 为空,而不是 elem 【参考方案1】:

您的 relatedlayout 尚未初始化,您正尝试在 null 上添加视图,这就是您收到此异常的原因。

像这样在onCreate()中初始化relatedLayout

relatedLayout=findViewById(R.id.your XML id)

【讨论】:

以上是关于非空 android 视图上的 java.lang.NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章

WindowManager 添加的视图上的 ViewPager 获取“java.lang.IllegalArgumentException:找不到 id 的视图”

java.lang.IllegalArgumentException:没有为片段的 id 0x1020002 (android:id/content) 找到视图

Android 4.4.2 上的异常“java.lang.ClassNotFoundException:找不到类...”

获取 android 房间数据库 java.lang.IllegalArgumentException 的以下异常:@androidx.room.Database 未定义元素视图()

java.lang.IllegalStateException:不是标准目录之一:Android 10 上的 /storage/emulated/0/Download/

java.lang.RuntimeException:处理程序(android.os.Handler)向死线程上的处理程序发送消息