Android R中已弃用AsyncTask。有其他代码吗?
由于Android R不推荐使用AsyncTask,因此我无法解析或接受来自web的JSON数据。所以我所做的是。我创建了一个名为DownloadingObject的kotlin类。下面是代码 类下载对象{Android R中已弃用AsyncTask。有其他代码吗?,android,android-studio,kotlin,android-asynctask,Android,Android Studio,Kotlin,Android Asynctask,由于Android R不推荐使用AsyncTask,因此我无法解析或接受来自web的JSON数据。所以我所做的是。我创建了一个名为DownloadingObject的kotlin类。下面是代码 类下载对象{ @Throws(IOException::class) fun downloadJSONDataFromLink(link: String): String { val stringBuilder: StringBuilder = StringBuilder() val u
@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()
}
我必须在后台运行这个下载任务。下面是代码
内部类下载PlantTask:AsyncTask>(){
override-fun-doInBackground(vararg参数:String?):列表{
//可以访问后台线程。不能访问用户界面线程
val downloadingObject:downloadingObject=downloadingObject()
var jsonData=downloadingObject.downloadJSONDataFromLink(
"http://plantplaces.com/perl/mobile/flashcard.pl"
)
Log.i(“JSON”,jsonData)
返回空
}
如果有人能提供任何替代代码,请告诉我。我只是Android开发中的一个比基纳。在Android上有几种实现多线程的方法。因为你使用Kotlin,你可能想研究一下。还有一些其他东西是包和,但在我看来,协同程序对初学者更友好,它们集成了它的Android组件非常好 对于协同程序,您的代码如下所示:
@Throws(IOException::class)
suspend fun downloadJSONDataFromLink(link: String): String { ... }
GlobalScope.launch {
val downloadingObject = DownloadingObject()
val jsonData = downloadingObject.downloadJSONDataFromLink("http://plantplaces.com/perl/mobile/flashcard.pl")
Log.i("JSON", jsonData)
}
关键字表示此函数只能从协同程序或其他挂起函数调用
您也应该考虑使用活动/片段而不是全局范围来避免内存泄漏。
“我创建了一个名为DownloadingObject的KOTLIN类”——因为使用了异步请求选项(<代码> EnQueNe())/>代码>,所以使用OKHTTP会更简单。@Throws(IOException::class)
suspend fun downloadJSONDataFromLink(link: String): String { ... }
GlobalScope.launch {
val downloadingObject = DownloadingObject()
val jsonData = downloadingObject.downloadJSONDataFromLink("http://plantplaces.com/perl/mobile/flashcard.pl")
Log.i("JSON", jsonData)
}