【问题标题】:How to replace AsynTask with RxJava in this case在这种情况下如何用 RxJava 替换 AsyncTask
【发布时间】:2021-08-01 00:57:06
【问题描述】:

我有一个可以减少图像的类,但我目前正在使用 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)
    }
}

【问题讨论】:

    标签: java android kotlin android-asynctask rx-java2


    【解决方案1】:

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

    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
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 2022-01-23
      相关资源
      最近更新 更多