添加LiveData观察器时Android崩溃

时间:2019-09-19 09:46:47

标签: android kotlin android-livedata

我正在尝试使LiveData Observer正常工作,并且一切正常,但是一周后,将片段与实时数据连接到我的活动时,我的应用程序一直崩溃。该片段非常简单,它具有一个RecyclerView,它在网格中显示Bloggers的列表。 ViewModel如下:

class SimpleBloggersViewModel : ViewModel() {
    var bloggers: MutableLiveData<List<Blogger>> = MutableLiveData()
}

然后使用以下代码在片段中对其进行初始化:

private val viewModel: SimpleBloggersViewModel by lazy {
    ViewModelProvider(this).get(SimpleBloggersViewModel::class.java)
}

导致崩溃的代码如下:

override fun onAttach(context: Context) {
    super.onAttach(context)
    try {
        viewModel.bloggers.observe(viewLifecycleOwner, Observer { changeObserver })
    } catch (e: IllegalStateException) {
        Log.e(TAG, "onAttach: Failed to attach BloggersFragment.", e)
    }
}

在没有{/ {1}}方法的try / catch的情况下,我得到了以下神秘异常(以及应用程序崩溃)

onAttach

添加了上面看到的try / catch块之后,该异常还提供了一些更多信息,但是我仍然不知道是什么原因引起的。

Process: com.mydomain.appname, PID: 31393
java.lang.IllegalStateException: Already attached
    at androidx.fragment.app.FragmentManager.attachController(FragmentManager.java:3000)
    at androidx.fragment.app.Fragment.performAttach(Fragment.java:2622)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1291)
    at androidx.fragment.app.FragmentTransition.addToFirstInLastOut(FragmentTransition.java:1264)
    at androidx.fragment.app.FragmentTransition.calculateFragments(FragmentTransition.java:1147)
    at androidx.fragment.app.FragmentTransition.startTransitions(FragmentTransition.java:120)
    at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2369)
    at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2327)
    at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2230)
    at androidx.fragment.app.FragmentManager$3.run(FragmentManager.java:414)
    at android.os.Handler.handleCallback(Handler.java:790)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6523)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:857)

请注意,在执行任何其他操作之前,我对所有重写方法都调用了super,因此第二个异常仍然无法帮助我找出错误。任何帮助是极大的赞赏。谢谢您的宝贵时间。

0 个答案:

没有答案