在这种情况下,如何用RxJava替换AsynTask

在这种情况下,如何用RxJava替换AsynTask,java,android,kotlin,android-asynctask,rx-java2,Java,Android,Kotlin,Android Asynctask,Rx Java2,我有一个类可以减少映像,但我目前正在使用AsyncTask,现在我想替换它,因为AsyncTask现在已不推荐使用。那么有人能帮我解决这个问题吗 这是我的密码: class DecreaseImageTask( val uri: Uri? = null, val bitmap: Bitmap? = null, var context: Context, var listener: (String?) -> Unit ) : AsyncTask<Void

我有一个类可以减少映像,但我目前正在使用AsyncTask,现在我想替换它,因为AsyncTask现在已不推荐使用。那么有人能帮我解决这个问题吗

这是我的密码:

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)
    }
}

类递减ImageTask(
val uri:uri?=null,
val位图:位图?=null,
var-context:context,
变量侦听器:(字符串?->Unit)
):AsyncTask(){
重写fun doInBackground(vararg参数:Void?):字符串{
何时返回{
uri!=null->{
减小ImageSize(imagePath=FileUtils.getPathURI(上下文,uri)?:“”)
}
位图!=null->{
减小图像大小(位图=位图)
}
}
}
重写onPostExecute(结果:字符串?){
super.onPostExecute(结果)
监听器(结果)
}
}

您可以更改
decreaseImageSize
以接受回调作为参数。
在这种情况下,函数将不再需要返回字符串,该字符串作为参数传递给回调函数,然后用作 其主体中的参数:

fun decreaseImageSize(imagePath: String? = null, bitmap: Bitmap? = null, callback: (String) -> Unit) {
    ...

    val result = "" // The result of the previous decreaseImageSize function

    callback(result)
}
然后,不要调用
AsyncTask
,而是使用新的
decreaseMageSize
函数:

    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
    }