【发布时间】:2020-09-09 04:07:07
【问题描述】:
由于 Android R 已弃用 AsyncTask,因此我无法解析或接受来自 webhttp://plantplaces.com/perl/mobile/flashcard.pl 的 JSON 数据。所以我所做的是。我创建了一个名为 DownloadingObject 的 kotlin 类。下面是代码
类下载对象 {
@Throws(IOException::class)
fun downloadJSONDataFromLink(link: String): String {
val stringBuilder: StringBuilder = StringBuilder()
val url: URL = URL(link)
val urlConnection = url.openConnection() as HttpURLConnection
try {
val bufferedInputString: BufferedInputStream =
BufferedInputStream(urlConnection.inputStream)
val bufferedReader: BufferedReader =
BufferedReader(InputStreamReader(bufferedInputString))
// temporary string to hold each line read from the BufferedReader.
var inputLineString: String?
inputLineString = bufferedReader.readLine()
while (inputLineString != null) {
stringBuilder.append(inputLineString)
inputLineString = bufferedReader.readLine()
}
} finally {
// regardless of success of Try Block or failure of Try Block, we will disconnect from the URLConnection.
urlConnection.disconnect()
}
return stringBuilder.toString()
}
我必须在后台运行这个下载任务。下面是代码
内部类 DownloadingPlantTask : AsyncTask>() {
override fun doInBackground(vararg params: String?): List<Plant>? {
// Can access background thread. Not user interface thread
val downloadingObject: DownloadingObject = DownloadingObject()
var jsonData = downloadingObject.downloadJSONDataFromLink(
"http://plantplaces.com/perl/mobile/flashcard.pl"
)
Log.i("JSON", jsonData)
return null
}
如果有人可以提供任何替代代码,请提供。我只是 Android 开发的初学者。
【问题讨论】:
-
“我创建了一个名为 DownloadingObject 的 kotlin 类”——使用 OkHttp 会更简单,因为它内置了异步请求选项 (
enqueue())。
标签: android android-studio kotlin android-asynctask