获取E/AndroidRuntime:FATAL EXCEPTION:main错误,我试图解析json文件,但它';投掷错误
我试图从URL解析JSON,但一旦我点击按钮加载JSON文件,我的应用程序就会崩溃。我还为清单文件上的外部存储提供了Internet访问权限、读写权限 我收到的Logcat错误:获取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
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
而