偏好设置库导致 E/libc 和 E/Pref 错误。

9

我正在使用MVVM和Retrofit构建一个天气应用程序,并最近添加了一个PreferencesFragmentCompat子类,使用preferences库来实现一些用户设置。但是,在这样做之后,我的应用程序无法运行,并且我不断收到这几行错误:

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!!
    }
}

你正在使用AndroidX吗?如果是,你是否在使用这个库?implementation 'androidx.preference:preference:1.1.0'。 - OscarCreator
@Ossy33 是的,我正在使用 AndroidX,但我正在使用这个库 implementation 'androidx.preference:preference-ktx:1.1.0' - Stelios Papamichail
1个回答

0
经过进一步的研究,我成功地找到了解决问题的方法。首先,我注释掉了与偏好库(以及库本身)相关的所有代码,然后再次运行应用程序。这次运行成功了,没有任何错误,因此可以将问题缩小到 androidx.preference:preference-ktx:1.1.0 库本身,因为我的代码已经经过审核,没有发现任何问题。通过查看 preference docs,我发现可以尝试使用可能修复了此问题的 beta 或 alpha 版本。结果,使用 androidx.preference:preference-ktx:1.1.0-beta01 beta 版本并取消注释相关代码后,一切都再次正常工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接