![](/img/trans.png)
[英]I need help ERROR E/AndroidRuntime: FATAL EXCEPTION: main
[英]Getting E/AndroidRuntime: FATAL EXCEPTION: main error, I am trying to parse json file but it'ss throwing error
I am trying to parse JSON from URL http://www.mocky.io/v2/5d94c49c2f000058008ff97c , but my app keeps crashing once I click on the button to load JSON file. 我还提供了对清单文件的外部存储的 Internet 访问权限、读写权限。
我得到的 Logcat 错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.abc.parsejson, PID: 11141
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:502)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:933)
Caused by: java.lang.reflect.InvocationTargetException
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:933)
Caused by: org.json.JSONException: Value kotlin.Unit of type java.lang.String cannot be converted to JSONArray
at org.json.JSON.typeMismatch(JSON.java:112)
at org.json.JSONArray.<init>(JSONArray.java:98)
at org.json.JSONArray.<init>(JSONArray.java:110)
at com.abc.parsejson.MainActivity$AsyncTaskHandler.jsonResult(MainActivity.kt:70)
at com.abc.parsejson.MainActivity$AsyncTaskHandler.onPostExecute(MainActivity.kt:64)
at com.abc.parsejson.MainActivity$AsyncTaskHandler.onPostExecute(MainActivity.kt:33)
at android.os.AsyncTask.finish(AsyncTask.java:755)
at android.os.AsyncTask.access$900(AsyncTask.java:192)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:772)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7343)
这是我的代码:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val url = findViewById<EditText>(R.id.editText).text
var load = findViewById<Button>(R.id.button)
load.setOnClickListener {
AsyncTaskHandler().execute(url.toString())
}
}
inner class AsyncTaskHandler:AsyncTask<String,Int,String>() {
override fun onPreExecute() {
super.onPreExecute()
findViewById<ProgressBar>(R.id.loader).visibility = View.VISIBLE
}
override fun doInBackground(vararg p0: String?): String {
return try {
p0.first().let {
val url = URL(it)
val urlConnect = url.openConnection() as HttpURLConnection
urlConnect.connectTimeout = 700
publishProgress(100)
urlConnect.inputStream.bufferedReader().readText()
}
} catch (e: Exception) {
p0.first().let {
val url = URL(it)
val urlConnect = url.openConnection() as HttpURLConnection
urlConnect.disconnect().toString()
}
}
}
override fun onPostExecute(result: String?) {
super.onPostExecute(result)
findViewById<ProgressBar>(R.id.loader).visibility = View.GONE
jsonResult(result)
Log.d("Fetched Data", result)
}
private fun jsonResult(jsonString: String?){
val jsonArray = JSONArray(jsonString)
val list=ArrayList<MyData>()
var i = 0
while(i<jsonArray.length()){
val jsonObject=jsonArray.getJSONObject(i)
list.add(
MyData(
jsonObject.getString("author"),
jsonObject.getString("photo")
)
)
i++
}
val adapter = ListAdapter(this@MainActivity,list)
val listView = findViewById<ListView>(R.id.listView)
listView.adapter = adapter
}
}
}
jsonString 在这里是 null 所以它不能被转换成 JSONArray -
private fun jsonResult(jsonString: String?){
首先,在将其转换为 JSONArray 之前添加一个 null 检查,并将所有解析代码移动到 try catch 块中 -
private fun jsonResult(jsonString: String?){
if(jsonString != null){
try{
val jsonArray = JSONArray(jsonString)
val list=ArrayList<MyData>()
var i = 0
while(i<jsonArray.length()){
val jsonObject=jsonArray.getJSONObject(i)
list.add(
MyData(
jsonObject.getString("author"),
jsonObject.getString("photo")
)
)
i++
}
}catch(e: JSONException){
Log.d("TAG", "Exc $e.message")
}
}
val adapter = ListAdapter(this@MainActivity,list)
val listView = findViewById<ListView>(R.id.listView)
listView.adapter = adapter
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.