Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取E/AndroidRuntime:FATAL EXCEPTION:main错误,我试图解析json文件,但它';投掷错误_Android_Kotlin - Fatal编程技术网

获取E/AndroidRuntime:FATAL EXCEPTION:main错误,我试图解析json文件,但它';投掷错误

获取E/AndroidRuntime:FATAL EXCEPTION:main错误,我试图解析json文件,但它';投掷错误,android,kotlin,Android,Kotlin,我试图从URL解析JSON,但一旦我点击按钮加载JSON文件,我的应用程序就会崩溃。我还为清单文件上的外部存储提供了Internet访问权限、读写权限 我收到的Logcat错误: E/AndroidRuntime: FATAL EXCEPTION: main Process: com.abc.parsejson, PID: 11141 java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at co

我试图从URL解析JSON,但一旦我点击按钮加载JSON文件,我的应用程序就会崩溃。我还为清单文件上的外部存储提供了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)
E/AndroidRuntime:致命异常:主
进程:com.abc.parsejson,PID:11141
java.lang.RuntimeException:java.lang.reflect.InvocationTargetException
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:502)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:933)
原因:java.lang.reflect.InvocationTargetException
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:933)
原因:org.json.JSONException:Value kotlin.Unit的类型java.lang.String无法转换为JSONArray
在org.json.json.typeMismatch(json.java:112)
位于org.json.JSONArray(JSONArray.java:98)
位于org.json.JSONArray(JSONArray.java:110)
位于com.abc.parsejson.MainActivity$AsyncTaskHandler.jsonResult(MainActivity.kt:70)
位于com.abc.parsejson.MainActivity$AsyncTaskHandler.onPostExecute(MainActivity.kt:64)
位于com.abc.parsejson.MainActivity$AsyncTaskHandler.onPostExecute(MainActivity.kt:33)
位于android.os.AsyncTask.finish(AsyncTask.java:755)
在android.os.AsyncTask.access$900(AsyncTask.java:192)
在android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:772)上
位于android.os.Handler.dispatchMessage(Handler.java:107)
位于android.os.Looper.loop(Looper.java:214)
位于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

    }



}
class MainActivity:AppCompatActivity(){
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val url=findviewbyd(R.id.editText).text
var load=findViewById(R.id.按钮)
load.setOnClickListener{
AsyncTaskHandler().execute(url.toString())
}
}
内部类AsyncTaskHandler:AsyncTask(){
覆盖乐趣onPreExecute(){
super.onPreExecute()
findviewbyd(R.id.loader).visibility=View.VISIBLE
}
重写fun doInBackground(vararg p0:String?:String){
回击{
p0.first(){
val url=url(它)
val urlConnect=url.openConnection()作为HttpURLConnection
urlConnect.connectTimeout=700
出版进度(100)
urlConnect.inputStream.bufferedReader().readText()
}
}捕获(e:例外){
p0.first(){
val url=url(它)
val urlConnect=url.openConnection()作为HttpURLConnection
urlConnect.disconnect().toString()
}
}
}
重写onPostExecute(结果:字符串?){
super.onPostExecute(结果)
findviewbyd(R.id.loader).visibility=View.go
jsonResult(结果)
Log.d(“获取的数据”,结果)
}
private-fun-jsonResult(jsonString:String?){
val jsonArray=jsonArray(jsonString)
val list=ArrayList()
变量i=0

而(ijsonString在这里为null,因此无法转换为JSONArray-

private fun jsonResult(jsonString: String?){
首先,在将其转换为JSONArray之前添加一个空检查,并将所有解析代码移到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

    }
private-fun-jsonResult(jsonString:String?){
if(jsonString!=null){
试一试{
val jsonArray=jsonArray(jsonString)
val list=ArrayList()
变量i=0
而