我在 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) 嘿,
我在应用程序中使用 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)
谢谢您的帮助。
首先,我创建了名为 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)