Я пытаюсь проанализировать JSON с URL http://www.mocky.io/v2/5d94c49c2f000058008ff97c,, но мое приложение продолжает падать, как только я нажимаю на кнопку, чтобы загрузить файл JSON. Я также предоставил разрешение на доступ в Интернет, чтение и запись для внешнего хранилища в файле манифеста.
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
}
}
}