小编And*_*234的帖子

为什么我从 AutoclearedValue 收到此异常?

我在 android 中使用 AutoclearedValue,在运行 Android 4.4.4 的旧平板电脑中,我总是遇到这样的异常: 当 AutoclearedValue 类可能无法提供 auto-cleared-value get 时,不应调用 auto-cleared-value get

我不明白为什么,因为在较新的设备中我没有得到这个异常。

场景如下:我单击 recyclerview 中的一个项目,然后将打开另一个片段。在这个片段中,我实现了简单的滚动视图监听器,它工作得很好。当我单击后退按钮导航回上一个片段时,我收到异常。

我的 AutoClearedValue 类:

class AutoClearedValue<T : Any>(val fragment: Fragment) : ReadWriteProperty<Fragment, T> {
    private var _value: T? = null

    init {
        fragment.lifecycle.addObserver(object: DefaultLifecycleObserver {
            override fun onCreate(owner: LifecycleOwner) {
                fragment.viewLifecycleOwnerLiveData.observe(fragment) { viewLifecycleOwner ->
                    viewLifecycleOwner?.lifecycle?.addObserver(object: DefaultLifecycleObserver {
                        override fun onDestroy(owner: LifecycleOwner) {
                            _value = null
                        }
                    })
                }
            }
        })
    }

    override fun getValue(thisRef: Fragment, property: KProperty<*>): T {
        return _value ?: …
Run Code Online (Sandbox Code Playgroud)

android kotlin

5
推荐指数
1
解决办法
3872
查看次数

如果文件存在,为什么 ACTION_CREATE_DOCUMENT 意图无法正确重命名该文件?

嘿,

我在应用程序中使用 ACTION_CREATE_DOCUMENT 意图,让用户选择下载文件的路径。当文件名唯一时,它工作正常。

根据文档,如果文件名存在,系统不会覆盖原始文件,而是将数字附加到文件末尾。

我尝试了原始的android示例,首先,当没有其他同名文件时,文件被完美创建,并且我可以打开,但是当我想以同名保存文件时,认为系统附加数字,不是在扩展名之前,而是在扩展名之后,如下所示:fileName.jpg(1),之后我无法打开,直到那时我删除了这个附加的字符串。

我只尝试了运行 Android 10 的三星 Galaxy S20,这是一个特定问题,还是我出了什么问题?

如果我可以在保存之前检查文件名,也许这将是一个很好的解决方案,但文档树会创建文件。

我从文档中尝试了这段代码:

const val CREATE_FILE = 1

private fun createFile() {
    val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
        addCategory(Intent.CATEGORY_OPENABLE)
        type = "application/pdf"
        putExtra(Intent.EXTRA_TITLE, "invoice.pdf")

    }
    startActivityForResult(intent, CREATE_FILE)
}
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助。

android kotlin

4
推荐指数
1
解决办法
2333
查看次数

如何注入Worker类?

首先,我创建了名为 UpdaterWorker 的工作类。之后,我在应用程序类中重写了 getWorkManagerConfiguration 。我创建了一个 WorkerFactory 类。

这就是我所要做的一切,还是我错过了什么?

如何创建一次性请求?

当我尝试将更新程序工作线程注入主活动时,出现此错误:Dagger 不支持注入 @AssistedInject 类型,.workmanager.UpdaterWorker。您的意思是注入其辅助工厂类型吗?

**Updater worker**

@HiltWorker
class UpdaterWorker @AssistedInject constructor(
    private val api: ReservationApi,
    private val updaterUrl: String,
    private val prefManager: PrefManager,
    @Assisted private val context: Context,
    @Assisted workerParams: WorkerParameters
) : Worker(context, workerParams) {
...
}

** Worker Factory**
class WorkerFactory @Inject constructor(
    private val api: ReservationApi,
    @param:Named("update_url") private val updaterUrl: String,
    private val prefManager: PrefManager,
) : WorkerFactory() {

    override fun createWorker(
        appContext: Context,
        workerClassName: String,
        workerParameters: WorkerParameters …
Run Code Online (Sandbox Code Playgroud)

android kotlin dagger-hilt

1
推荐指数
1
解决办法
1431
查看次数

标签 统计

android ×3

kotlin ×3

dagger-hilt ×1