Java 在Android中异步处理多个连续URL请求

Java 在Android中异步处理多个连续URL请求,java,android,android-asynctask,httprequest,kotlin,Java,Android,Android Asynctask,Httprequest,Kotlin,我在请求多个连续url http请求时遇到问题。我的应用程序没有崩溃。在代码中使用loadUrls()函数时,它连续执行6个url请求并将它们存储在一个数组中,但是我只能看到请求的第一个字符串响应 fun loadUrls(){ val locationInput = “AsiaWorldExpo” val locationCoordinatesLong = 113.947 val locationCoordinatesLat = 22.2913 val myAPIKey = "REM

我在请求多个连续url http请求时遇到问题。我的应用程序没有崩溃。在代码中使用loadUrls()函数时,它连续执行6个url请求并将它们存储在一个数组中,但是我只能看到请求的第一个字符串响应

fun loadUrls(){
val locationInput = “AsiaWorldExpo”
val locationCoordinatesLong = 113.947
val locationCoordinatesLat = 22.2913
val myAPIKey = "REMOVED"
val transportMode = arrayListOf("&mode=driving" ,"&mode=walking", "&mode=bicycling",
        "&mode=transit&transit_mode=bus", "mode=transit&transit_mode=subway", "mode=transit&transit_mode=train")

var requestURLArray = ArrayList<String>()
for (i in 0 until transportMode.size) {

  requestURLArray.add("https://maps.googleapis.com/maps/api/distancematrix/json?units=metric&origins= " +
            "$locationCoordinatesLat,$locationCoordinatesLong &destinations=$locationInput ${transportMode[i]} &key= $myAPIKey")
}
MyAsyncTask().execute(requestURLArray[0],requestURLArray[1],requestURLArray[2]
        ,requestURLArray[3], requestURLArray[4], requestURLArray[5])
}

override fun doInBackground(vararg p0: String?): String { 
        try {
            val inString = ArrayList<String>()
            for (i in 0 until p0.size) {
                val url = URL(p0[i])

                val urlConnect = url.openConnection() as HttpURLConnection
                urlConnect.connectTimeout = 7000
                inString.add(ConvertStreamToString(urlConnect.inputStream)) 
                publishProgress(inString[i])
                Log.d("APP_TEST", "" + p0[i]) //Added for debugging
                try {
                    Thread.sleep(500)
                } catch (e: InterruptedException) {}
            }
        }catch (r:Exception){}

        return " "
    }

override fun onProgressUpdate(vararg values: String?) {
    try{
        val jsonObject = ArrayList<String>()
        for (i in 0 until values.size){

            jsonObject.add(values[i]!!)
            Log.d("Testing", "" + values[i]) //Added for debugging

        }
        idTextView2.text =  jsonObject[1] 
以下是更新的日志:

08-18 09:51:21.697 2660-3883/com.google.android.gms W/DriveInitializer:后台初始化线程已结束

08-18 09:52:00.4051369-1409/?W/audio_hw_generic:未向HAL提供足够的数据,预期位置为772788,仅写入772560

08-18 09:52:00.433 3297-3320/com.companyname.emitless2 D/EGL_仿真:eglmakeecurrent:0x7ebacc5cc6e0:ver 2 0(tinfo 0x7ebadbdb9d00)

08-18 09:52:00.441 3297-3320/com.companyname.emitless2 D/EGL_仿真:eglmakeecurrent:0x7ebacc5cc6e0:ver 2 0(tinfo 0x7ebadbdb9d00)

08-18 09:52:00.590 3297-3894/com.companyname.emitless2 D/APP_TEST:22.29129833333113.94699999999999&destinations=AsiaWorldExpo&mode=driving&key=“已删除”

08-18 09:52:00.590 3297-3297/com.companyname.emitless2 D/测试:{“目的地地址”:[“香港赤濸角昌荣路],“起点地址”:[“香港东涌益东路”,“行”:[{“元素”:[{“距离”:{“文本”:“5.9公里”,“值”:5948},“持续时间”:{“文本”:“9分钟”,“值”:541},“状态”:“确定”}],“状态”:“确定”}

08-18 09:52:01.286 3297-3894/com.companyname.emitless2 D/APP_TEST:22.29129833333113.94699999999999&destinations=AsiaWorldExpo&mode=walking&key=“已删除”

08-18 09:52:01.287 3297-3297/com.companyname.emitless2 D/测试:{“目的地地址”:[“香港赤濸角昌荣路],“始发地地址”:[“香港东涌益东路”,“行”:[{“元素”:[{“距离”:{“文本”:“5.9公里”,”值:5948},“持续时间”:{“文本”:“9分钟”,“值”:541},“状态”:“确定”}],“状态”:“确定”}

08-18 09:52:01.865 3297-3894/com.companyname.emitless2 D/APP_TEST:22.29129833333113.946999999999&destinations=AsiaWorldExpo&mode=bicycling&key=“已删除”

08-18 09:52:01.865 3297-3297/com.companyname.emitless2 D/测试:{“目的地地址”:[“香港赤濸角昌荣路],“始发地地址”:[“香港东涌益东路”,“行”:[{“元素”:[{“距离”:{“文本”:“5.9公里”,”值:5948},“持续时间”:{“文本”:“9分钟”,“值”:541},“状态”:“确定”}],“状态”:“确定”}

08-18 09:52:02.409 1672-1672/system_进程W/WindowManager:试图删除不存在的令牌:android.os。Binder@7d40824

08-18 09:52:02.495 3297-3320/com.companyname.emitless2 D/EGL_仿真:eglmakeecurrent:0x7ebacc5cc6e0:ver 2 0(tinfo 0x7ebadbdb9d00)

08-18 09:52:02.540 3297-3320/com.companyname.emitless2 D/EGL_仿真:eglmakeecurrent:0x7ebacc5cc6e0:ver 2 0(tinfo 0x7ebadbdb9d00)

08-18 09:52:03.632 1369-1410/?W/audio_hw_generic:未向HAL提供足够的数据,预期位置1080247,仅写入927360

08-18 09:52:04.458 1672-1672/system_进程W/WindowManager:试图删除不存在的令牌:android.os。Binder@f7c5953


在每次迭代中,您都将创建名为inString的新实例,其类型为ArrayList。因此,当您创建新实例并向其中添加项时,该项始终为0。请通过将ArrayList实例创建移动到循环外部来修复它

override fun doInBackground(vararg p0: String?): String { 
 try {
    val inString = ArrayList<String>()
    for (i in 0 until p0.size) {
        val url = URL(p0[i]) 
        val urlConnect = url.openConnection() as HttpURLConnection
        urlConnect.connectTimeout = 7000          
        inString.add(ConvertStreamToString(urlConnect.inputStream)) 
        publishProgress(inString[i])
        try {
            Thread.sleep(500)
        } catch (e: InterruptedException) {}
    }
}catch (e:Exception){}
return " "
}
override-fun-doInBackground(vararg p0:String?):String{
试一试{
val inString=ArrayList()
对于(i在0中,直到p0.size){
val url=url(p0[i])
val urlConnect=url.openConnection()作为HttpURLConnection
urlConnect.connectTimeout=7000
inString.add(ConvertStreamToString(urlConnect.inputStream))
出版进度(仪表[i])
试一试{
线程。睡眠(500)
}catch(e:InterruptedException){}
}
}捕获(e:异常){}
返回“”
}

< /代码>我已经从您的代码中删除了API密钥。考虑到它是否泄露了,所以我建议禁用它并获得一个新的密钥。您几乎不应该在堆栈溢出或其他公共平台上发布API密钥。非常感谢,您是否可以提供LogCCAT?也可以添加<代码> E.PrimtStAccTrace()。
到您的
catch
块,在上面的帖子中获得Logcated Logcat超级棒!棒极了。但是仍然没有将jsonObject[1]打印到jsonObject[5]。请查看更新的帖子和所有内容。我已经按照您的建议进行了修改。谢谢您的时间。
override fun doInBackground(vararg p0: String?): String { 
 try {
    val inString = ArrayList<String>()
    for (i in 0 until p0.size) {
        val url = URL(p0[i]) 
        val urlConnect = url.openConnection() as HttpURLConnection
        urlConnect.connectTimeout = 7000          
        inString.add(ConvertStreamToString(urlConnect.inputStream)) 
        publishProgress(inString[i])
        try {
            Thread.sleep(500)
        } catch (e: InterruptedException) {}
    }
}catch (e:Exception){}
return " "
}