跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 伟大的网友们,来帮帮忙。关于使用 DataStore 的问题
未分類
4 4 月 2021

伟大的网友们,来帮帮忙。关于使用 DataStore 的问题

伟大的网友们,来帮帮忙。关于使用 DataStore 的问题

資深大佬 : CongrooPsyEl 0

最近刚好想试一下 DataStore,试着写了个更换语言的功能。

 open class BaseActivity : AppCompatActivity() {       override fun attachBaseContext(newBase: Context) {         lifecycleScope.launch(Dispatchers.Main) {             var context = newBase             val language = withContext(Dispatchers.IO) {                 DataStore.read(context, DataStore.KEY_LANG)             }             context = Language.changeLanguage(context, language ?:              Language.ZH)             super.attachBaseContext(context)         }     } } 

之前都是在这用 sp 拿出存储的键值对的,现在换了 DataStore 之后不得不用协程所以就协程上面的样子了。

然后如果这样写的话是会报这样的错:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference 

打了断点看了下,代码走不到 super.attachBaseContext(context)。 万能的网友萌,教教萌新吧~

大佬有話說 (8)

  • 資深大佬 : Still4

    兄弟你这代码贴一半啊…DataStore 用的哪个版本,Language 是什么包

    你试试自己新起一个工程,贴上这段代码能通过编译么…

  • 資深大佬 : ikas

    lifecycleScope.launch 之后直接返回了…

  • 資深大佬 : ikas

    然后当然走不到 super.attachBaseContext(context),所以 context 是 null

  • 資深大佬 : fromzero

    lifecycleScope 生命周期问题

  • 資深大佬 : ikas

    attachBaseContext 这个方法你要保证 super 这个调用之后,才能返回

  • 資深大佬 : fromzero

    @fromzero 看错了。我也不不知道

  • 資深大佬 : hstan

    mmkv 不香吗

  • 資深大佬 : Still4

    class MyFragment: Fragment() {
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    viewLifecycleOwner.lifecycleScope.launch {
    val params = TextViewCompat.getTextMetricsParams(textView)
    val precomputedText = withContext(Dispatchers.Default) {
    PrecomputedTextCompat.create(longTextContent, params)
    }
    TextViewCompat.setPrecomputedText(textView, precomputedText)
    }
    }
    }

    lifecycleScope 官方用法是这样的,我理解是 lifecycleScope.launch(Dispatchers.Main)这里就有问题

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具