我使用这段代码来解析json文件,并在我构建的de app中更改一些项:
fun fetchJson() {
if (isNetworkAvailable()) {
val request = Request.Builder().url(stationAPPJsonURL).build()
client.newCall(request).enqueue(object : Callback {
override fun onResponse(call: Call, response: Response) {
val body = response.body?.string()
val gson = GsonBuilder().create()
try {
val stationAPP = gson.fromJson(body, StationAPP::class.java)
//ACTIE
actie_zichtbaar = stationAPP.actie_zichtbaar
actie_img = stationAPP.actie_img
actie_url = stationAPP.actie_url
... I left out some code
catch (error: JsonParseException) {
runOnUiThread {
val toast = Toast.makeText(applicationContext, "Problem loading JSON.\nFunctionality may be limited for a while.", Toast.LENGTH_SHORT)
val view = toast.view!!.findViewById<TextView>(android.R.id.message)
toast?.let { view.gravity = Gravity.CENTER }
toast.setGravity(Gravity.CENTER, 0, 0)
toast.show()
}
}
}
override fun onFailure(call: Call, e: IOException) {
runOnUiThread {
val toast = Toast.makeText(applicationContext, "Problem loading JSON.\nFunctionality may be limited for a while.", Toast.LENGTH_SHORT)
val view = toast.view!!.findViewById<TextView>(android.R.id.message)
view?.let { view.gravity = Gravity.CENTER }
toast.setGravity(Gravity.CENTER, 0, 0)
toast.show() --> line 1390!!
}
}
}
}我在Google控制台的日志中看到,有时这部分代码会崩溃(4%)。我不知道为什么?我在几个设备上测试了它,没有任何错误。
谁能帮我?
是否有可能: val stationAPP = gson.fromJson(body,StationAPP::class.java)也不会抛出异常,但是json文件不知何故装载了一些错误?所以有些项目是空的?
(谢谢你的帮助;)
更新:这是它产生的错误:
Exception java.lang.NullPointerException:
at com.familiekoning.grolloo.MainActivity$fetchJson$1.onFailure$lambda-10 (MainActivity.kt:1390)
at com.familiekoning.grolloo.MainActivity$fetchJson$1.$r8$lambda$lczurdfMtnZdFDn9iwHvPqw9_Pg
at com.familiekoning.grolloo.MainActivity$fetchJson$1$$ExternalSyntheticLambda8.run
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:7806)
at java.lang.reflect.Method.invoke
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:958)发布于 2022-11-03 14:17:02
这将是一个猜测,但如果您在任何地方看到!!,并且您有NullPointerException。你很确定这就是罪魁祸首。如果你想要一个不同的烤面包外观,有NPE安全ways。
依赖的东西,即android.id.x是不安全的,因为它可能是非常依赖OEM。
发布于 2022-11-03 14:25:33
我改变了:
val toast = Toast.makeText(applicationContext, "Problem loading JSON.\nFunctionality may be limited for a while.", Toast.LENGTH_SHORT)
val view = toast.view!!.findViewById<TextView>(android.R.id.message)
view?.let { view.gravity = Gravity.CENTER }
toast.setGravity(Gravity.CENTER, 0, 0)
toast.show()至:
val toast = Toast.makeText(applicationContext, "Problem loading JSON.\nFunctionality may be limited for a while.", Toast.LENGTH_SHORT)
toast.setGravity(Gravity.CENTER, 0, 0)
toast.show()解决了问题。
https://stackoverflow.com/questions/74303699
复制相似问题