簡體   English   中英

Google Play控制台中的java.lang.IllegalStateException崩潰報告

[英]java.lang.IllegalStateException crash reports from Google Play Console

我的Android應用出現問題。 使用Android 7.1或8.0的某些設備通常會報告IllegatStateException崩潰。 我在Google上進行了搜索,並試圖對其進行多次修復,但沒有用。 我不知道是什么原因導致了崩潰。 如果有時間請幫助我。 這是一份完整的報告:

java.lang.IllegalStateException: 

  at android.support.v4.app.FragmentManagerImpl.addFragment (FragmentManagerImpl.java:60)

  at android.support.v4.app.BackStackRecord.executeOps (BackStackRecord.java:137)

  at android.support.v4.app.FragmentManagerImpl.executeOps (FragmentManagerImpl.java:38)

  at android.support.v4.app.FragmentManagerImpl.executeOpsTogether (FragmentManagerImpl.java:112)

  at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute (FragmentManagerImpl.java:89)

  at android.support.v4.app.FragmentManagerImpl.execPendingActions (FragmentManagerImpl.java:21)

  at android.support.v4.app.FragmentManagerImpl$1.run (FragmentManagerImpl.java:2)

  at android.os.Handler.handleCallback (Handler.java:869)

  at android.os.Handler.dispatchMessage (Handler.java:101)

  at android.os.Looper.loop (Looper.java:206)

  at android.app.ActivityThread.main (ActivityThread.java:6733)

  at java.lang.reflect.Method.invoke (Method.java)

  at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:240)

  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:845)

我有一個主要活動包含一個FrameLayout。 我使用以下FrameLayout通過以下方式顯示5個不同的片段:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
switch (button) {
    case 1:
        ft.replace(R.id.mainframe, fragment1, FRAGMENT1_TAG);
        break;
    case 2:
        ft.replace(R.id.mainframe, fragment2, FRAGMENT2_TAG);
        break;
    case 4:
        Fragment fragment4 = new Fragment();
        ft.replace(R.id.mainframe, fragment4, FRAGMENT4_TAG);
        break;
}
ft.setTransition(FragmentTransaction.TRANSIT_ENTER_MASK);
ft.commit();

必須保存一些片段以供以后還原(片段1-> 3),一些片段必須刷新(創建新實例)(片段4-> 5)。 此外,在片段4和5上,有一個viewpager和一個按鈕數組,每個按鈕都在頁面之間移動。 Viewpagers的代碼:

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    viewPager.setAdapter(new FragmentPagerAdapter(getChildFragmentManager(), new Fragment[] {
            new Page1(),
            new Page2()
    }));
}

private void onButtonTap(Button btn) {
    switch (btn.getId()) {
        case R.id.button1:
            viewPager.setCurrentItem(0, true);
            break;
        case R.id.button2:
            viewPager.setCurrentItem(1, true);
            break;
    }
}

我還定義了兩個從Dialog派生的類,並使用Toast。 我無法在模擬器或設備上復制。 它僅在少數設備上發生。 我的代碼有什么問題嗎? 請幫我。 崩潰持續了很長時間,我需要擺脫它。 我期待着您的回音。 非常感謝你。


編輯1:這是我在片段1上調用ft.replace的地方

@Override
protected void onResume() {
    // Check server connection to go back to the first fragment
    if (!ConnectivityReceiver.getInstance().isServerConnected()) {
        Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.main_frame);
        if (currentFragment != null && 
            (FRAGMENT_4_TAG.equals(currentFragment.getTag()) || FRAGMENT_5_TAG.equals(currentFragment.getTag())) && isActive()) {
            .....
            ft.replace(fragment1);
        }
    }
}

根據源代碼,如果您嘗試添加已經是管理器成員的Fragment ,則addFragment方法將引發該異常並顯示消息"Fragment already added"

現在,我可以看到的FragmentManagerImpl源代碼版本看起來與堆棧跟蹤完全不同,因此這有點猜測。 但是我懷疑問題是,當fragment2fragment1已經是布局的一部分時,您可能正在調用ft.replace 在某些情況下 ....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM