我一直在try 使用工作管理器和下载图像使用 retrofit ,并面临这个问题.

问题出在这段代码中

Result.Success( // This is creating problem
                    workDataOf(
                        WorkerConstants.IMAGE_URI to file.toUri().toString()
                    )
                )

这是完整的功能代码.

import android.content.Context
import androidx.core.app.NotificationCompat
import androidx.core.net.toUri
import androidx.work.CoroutineWorker
import androidx.work.ForegroundInfo
import androidx.work.WorkerParameters
import androidx.work.workDataOf
import com.gk.mycomposable.R
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.withContext
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
import kotlin.random.Random

class DownloadWorker(
    private val context: Context,
    private val workerParam: WorkerParameters
) : CoroutineWorker(context, workerParam) {
    override suspend fun doWork(): Result {
        startForegroundService()
        delay(5000L)

        val response = FileAPI.instance.downloadImage()
        response.body()?.let { body ->
            return withContext(Dispatchers.IO) {
                val file = File(context.cacheDir, "image.jpg")
                val outputStream = FileOutputStream(file)
                outputStream.use { stream ->
                    try {
                        stream.write(body.bytes())
                    } catch (e: IOException) {
                        return@withContext Result.failure(
                            workDataOf(
                                WorkerConstants.ERROR_MSG to e.localizedMessage
                            )
                        )
                    }
                }
                Result.Success( // This is creating problem
                    workDataOf(
                        WorkerConstants.IMAGE_URI to file.toUri().toString()
                    )
                )
            }
        }
        if (!response.isSuccessful){
            if (response.code().toString().startsWith("5")){ 
                return Result.retry()
            }
            return Result.failure(
                workDataOf(
                    WorkerConstants.ERROR_MSG to "Network error"
                )
            )
        }
        return Result.failure(
            workDataOf(
                WorkerConstants.ERROR_MSG to "Unknown error"
            )
        )
    }

    private suspend fun startForegroundService() {
        setForeground(
            ForegroundInfo(
                Random.nextInt(),
                NotificationCompat.Builder(context, WorkerConstants.channelId)
                    .setSmallIcon(R.drawable.skull)
                    .setContentText("Downloading...")
                    .setContentTitle("Download in progress")
                    .build()
            )
        )
    }

有人能告诉我为什么Success()会显示这个警告吗?

推荐答案

要解决这个问题,您可以改用Result.success方法,它是androidx.work库的一部分,可以从您的代码中调用.

Android相关问答推荐

Jetpack Compose Scaffold—content不在TopAppBar下面开始'

安卓Gradle看不到dagger 柄

Yarn 机器人导致活动未找到,但Gradlew Run工作正常

try 用Jetpack Compose理解视图模型和导航

如何用帆布在喷气背包中画一个圆环?

Jetpack Compose-如何在进入新产品线之前删除单词?

FFmpeg Android 错误

任务:app:kaptGenerateStubsDebugKotlin执行失败. > 'compileDebugJavaWithJavac' 任务(当前目标是 1.8)

页面标题未显示在内容页面上

在 Jetpack Compose 中对齐行项目

为什么集成React Native时compileSdkVersion错误?

如何将一个 Composable 作为其参数传递给另一个 Composable 并在 Jetpack Compose 中显示/运行它

Jetpack Compose:SpanStyle 的 TextAlign(垂直居中)

为 AlertDialog 的消息文本设置自定义字体

如何使用底页,启用和展开父交互

Android Material Date Range Picker - 如何仅更改所选范围日期的文本 colored颜色 ?

现代Android中的后台处理

Android Studio,Db 连接错误:发生异常情况导致驱动程序失败.请报告此异常

使用 Jetpack Compose 的深层链接导航到可组合项

使用协程访问数据库