在这种情况下如何用 RxJava 替换 AsyncTask
How to replace AsynTask with RxJava in this case
我有一个 class 可以减少图像,但我目前正在使用 AsyncTask,现在我想更换它,因为 AsyncTask 现在 deprecated.So 谁能帮我解决这个问题
这是我的代码:
class DecreaseImageTask(
val uri: Uri? = null,
val bitmap: Bitmap? = null,
var context: Context,
var listener: (String?) -> Unit
) : AsyncTask<Void, Long, String?>() {
override fun doInBackground(vararg params: Void?): String? {
return when {
uri != null -> {
decreaseImageSize(imagePath = FileUtils.getPathURI(context, uri) ?: "")
}
bitmap != null -> {
decreaseImageSize(bitmap = bitmap)
}
}
}
override fun onPostExecute(result: String?) {
super.onPostExecute(result)
listener(result)
}
}
您可以更改 decreaseImageSize
以接受回调作为参数。
在这种情况下,函数将不再需要 return 一个字符串,它作为参数传递给回调函数,然后用作
其主体中的一个参数:
fun decreaseImageSize(imagePath: String? = null, bitmap: Bitmap? = null, callback: (String) -> Unit) {
...
val result = "" // The result of the previous decreaseImageSize function
callback(result)
}
然后,不要调用 AsyncTask
,而是使用新的 decreaseImageSize
函数:
decreaseImageSize(imagePath = FileUtils.getPathURI(context, uri) ?: "") { result ->
// Execute the code after the image is decreased
}
decreaseImageSize(bitmap = bitmap) { result ->
// Execute the code after the image is decreased
}
我有一个 class 可以减少图像,但我目前正在使用 AsyncTask,现在我想更换它,因为 AsyncTask 现在 deprecated.So 谁能帮我解决这个问题
这是我的代码:
class DecreaseImageTask(
val uri: Uri? = null,
val bitmap: Bitmap? = null,
var context: Context,
var listener: (String?) -> Unit
) : AsyncTask<Void, Long, String?>() {
override fun doInBackground(vararg params: Void?): String? {
return when {
uri != null -> {
decreaseImageSize(imagePath = FileUtils.getPathURI(context, uri) ?: "")
}
bitmap != null -> {
decreaseImageSize(bitmap = bitmap)
}
}
}
override fun onPostExecute(result: String?) {
super.onPostExecute(result)
listener(result)
}
}
您可以更改 decreaseImageSize
以接受回调作为参数。
在这种情况下,函数将不再需要 return 一个字符串,它作为参数传递给回调函数,然后用作
其主体中的一个参数:
fun decreaseImageSize(imagePath: String? = null, bitmap: Bitmap? = null, callback: (String) -> Unit) {
...
val result = "" // The result of the previous decreaseImageSize function
callback(result)
}
然后,不要调用 AsyncTask
,而是使用新的 decreaseImageSize
函数:
decreaseImageSize(imagePath = FileUtils.getPathURI(context, uri) ?: "") { result ->
// Execute the code after the image is decreased
}
decreaseImageSize(bitmap = bitmap) { result ->
// Execute the code after the image is decreased
}