首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ListAdapter网络调用使用WorkManager从服务器下载文件并显示进度

ListAdapter网络调用使用WorkManager从服务器下载文件并显示进度
EN

Stack Overflow用户
提问于 2019-04-28 19:17:13
回答 1查看 226关注 0票数 0

我有兴趣知道下载文件使用升级和显示项目适配器的进度的设计。

我正在使用工作管理器来做我的工作,并使用retrofit下载文件,但目前我还没有找到任何显示项目进度的方法。

请找到我的代码,如下所示。

适配器代码

代码语言:javascript
运行
复制
class PamphletListAdapter(
        appExecutors: AppExecutors,
        private val callback: ClickCallback)
    : DataBoundListAdapter<PamphletModel, PamphletCardViewBinding>(appExecutors,
        PamphletListItemDiff()) {

    override fun createBinding(parent: ViewGroup): PamphletCardViewBinding {
        return PamphletCardViewBinding.inflate(LayoutInflater.from(parent.context), parent, false)
    }

    override fun bind(binding: PamphletCardViewBinding, item: PamphletModel, position: Int, isLast: Boolean) {
        binding.pamphletModel = item
        binding.pamphletItemView.setOnClickListener {
            binding.pamphletModel?.let { data ->
                callback.onClick(data, position)
            }
        }
    }

    interface ClickCallback {
        fun onClick(data: PamphletModel, position: Int)
    }
}

片段上的OnClick处理程序。

代码语言:javascript
运行
复制
private fun addToDownload(position: Int, data: PamphletModel) {
    history.push(position)
    val workData: Data = Data.Builder()
            .putString(Constants.WORK_MANAGER_DATA, PamphletModel.getStringFromPamphlets(data))
            .putInt(Constants.WORK_MANAGER_POSITION, position)
            .build()

    val fileManager = OneTimeWorkRequestBuilder<FileDownLoadManagerWorker>()
            .setInputData(workData).build()

    WorkManager.getInstance().getWorkInfoByIdLiveData(fileManager.id).observe(this@PamphletListFragment, Observer {
        handlePDFDownloadResponse(fileManager, it)
    })

    WorkManager.getInstance().enqueue(fileManager)
}

工作管理器代码。

代码语言:javascript
运行
复制
override fun doWork(): Result {
    val pamphletModel = PamphletModel.getPamphletsFromString(inputData.getString(Constants.WORK_MANAGER_DATA))


    if (PatwFileUtils.checkCacheFilesExist(pamphletModel.pdfPath, pamphletModel.thumbnailPath)) {
        return Result.success()
    }

    val rootDirectory = PatwFileUtils.getPamphletDirectory(context)

    //download pdf
    pamphletModel.pdfPath = DownloadManager.downloadFile(pamphletModel.downloadUrl, PatwFileUtils.getPamphletPDFFilePath(rootDirectory, pamphletModel.pamphletId))?.path

    //Download image -> save on thumbnail Path
    pamphletModel.thumbnailPath = getPamphletThumbnailImage(context, pamphletModel)

    pamphletModel.isDownloaded = Constants.PDF_STATUS_DOWNLOADED

    pamphletModel.createAt = Date()

    //Insert data to database
    pamphletDao.insert(pamphletModel)

    val outputData = createOutputData(pamphletModel, inputData.getInt(Constants.WORK_MANAGER_POSITION, 0))
    Timber.i("Work successfully completed...$pamphletModel")
    return Result.success(outputData)
}

观察者代码来完成工作管理器。

代码语言:javascript
运行
复制
private fun handlePDFDownloadResponse(fileManager: OneTimeWorkRequest, workInfo: WorkInfo) {
    Timber.i("Work id = ${fileManager.id}  State =  ${workInfo.state} ")
    if (workInfo.state == WorkInfo.State.SUCCEEDED) {
        val result = workInfo.outputData

        val resultPosition: Int = result.getInt(Constants.WORK_MANAGER_POSITION, 0)
        val resultData = PamphletModel.getPamphletsFromString(result.getString(Constants.WORK_MANAGER_DATA))
        resultData.isDownloaded = Constants.PDF_STATUS_DOWNLOADED
        pamphletListAdapter.notifyItemChanged(resultPosition)

        if (!history.empty() && history.peek() == resultPosition) {
            history.clear()
            UtilIntent.launchPamphletFragment(context!!, configuration, resultData)
        }
    }
}

请帮助我显示项目的进展,如果需要任何其他类代码,请让我知道。

EN

回答 1

Stack Overflow用户

发布于 2019-05-03 04:16:18

您将需要根据您的进度更新一些其他数据源。WorkManager不提供此功能。例如,您可以使用Room更新某个端数据库中的进度,并使用LiveData观察值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55889701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档