【发布时间】: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.LinearLayout{8ee2334 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。
标签: java android kotlin asynchronous nullpointerexception