Android Studio 首选项库导致E/libc & E/Pref错误

0s0u357o  于 2022-11-16  发布在  Android
关注(0)|答案(1)|浏览(185)

我正在使用MVVM构建一个天气应用程序,并进行了改进,最近我添加了一个PreferencesFragmentCompat子类,以使用首选项库实现一些用户设置。完成此操作后,我的应用程序将无法运行,并不断收到以下几行错误:

2020-04-08 00:54:12.346 18079-18079/? E/de.flogaweathe: Unknown bits set in runtime_flags: 0x8000
2020-04-08 00:54:12.410 18079-18079/com.nesoinode.flogaweather E/libc: Access denied finding property "ro.vendor.df.effect.conflict"
2020-04-08 00:54:12.421 18079-18110/com.nesoinode.flogaweather E/Perf: Fail to get file list com.nesoinode.flogaweather
2020-04-08 00:54:12.421 18079-18110/com.nesoinode.flogaweather E/Perf: getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array
2020-04-08 00:54:12.421 18079-18110/com.nesoinode.flogaweather E/Perf: Fail to get file list oat
2020-04-08 00:54:12.422 18079-18110/com.nesoinode.flogaweather E/Perf: getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array

我不知道这些是什么,我在stack或google上也找不到任何具体的答案。没有任何迹象表明是什么导致了错误,所以我不知道是我做错了什么还是库的问题。有什么想法吗?
下面是SettingsFragment,我将在其中添加来自xml资源文件的首选项:

class SettingsFragment : PreferenceFragmentCompat() {
    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        addPreferencesFromResource(R.xml.settings_prefs)
    }
}

下面是我如何从sharedPrefs阅读一些值:

class UnitProviderImpl(context: Context) : UnitProvider {

    private val appContext = context.applicationContext
    private val preferences:SharedPreferences
        get() = PreferenceManager.getDefaultSharedPreferences(appContext)

    override fun getUnitSystem(): String {
        val selectedUnitSystemName = preferences.getString(UNIT_SYSTEM_KEY,
            UnitSystem.SI.name.toLowerCase(Locale.ROOT))
        return selectedUnitSystemName!!
    }
}
5sxhfpxr

5sxhfpxr1#

我在做了进一步的研究之后终于想出了解决这个问题的办法:首先,我注解掉了与首选项库相关的所有代码(和库本身),并再次运行应用程序。运行成功,没有任何错误,所以缩小到androidx.preference:preference-ktx:1.1.0库本身,因为我的代码被审查,没有发现任何问题。通过查看preference docs,我想我可以尝试一个beta或alpha版本,可能已经解决了这个问题。瞧,在使用androidx.preference:preference-ktx:1.1.0-beta01 beta版本和取消注解相关代码后,一切又开始工作了。

相关问题