NullPointerException:尝试调用虚拟方法';java.lang.Object android.util.SparseArray.get(int)和#x27;关于空对象引用

NullPointerException:尝试调用虚拟方法';java.lang.Object android.util.SparseArray.get(int)和#x27;关于空对象引用,android,Android,我在我的项目中使用了这个android支持库版本25.0.1 我在某个时间在某些设备上遇到错误 在logcat中: //logcat java.lang.RuntimeException: Unable to start activity ComponentInfo{com.bookmark.money/com.zoostudio.moneylover.ui.ActivityBase}: java.lang.NullPointerException: Attempt to invoke virt

我在我的项目中使用了这个android支持库版本25.0.1

我在某个时间在某些设备上遇到错误

在logcat中:

//logcat
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.bookmark.money/com.zoostudio.moneylover.ui.ActivityBase}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.util.SparseArray.get(int)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2464)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2526)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4122)
at android.app.ActivityThread.access$900(ActivityThread.java:169)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1427)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5549)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.util.SparseArray.get(int)' on a null object reference
at android.view.View.dispatchRestoreInstanceState(View.java:13796)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3016)
at android.view.View.restoreHierarchyState(View.java:13779)
at android.support.design.internal.NavigationMenuPresenter$NavigationMenuAdapter.restoreInstanceState(NavigationMenuPresenter.java:592)
at android.support.design.internal.NavigationMenuPresenter.onRestoreInstanceState(NavigationMenuPresenter.java:191)
at android.support.v7.view.menu.MenuBuilder.dispatchRestoreInstanceState(MenuBuilder.java:355)
at android.support.v7.view.menu.MenuBuilder.restorePresenterStates(MenuBuilder.java:367)
at android.support.design.widget.NavigationView.onRestoreInstanceState(NavigationView.java:201)
at android.view.View.dispatchRestoreInstanceState(View.java:13801)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3016)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3022)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3022)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3022)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3022)
at android.view.View.restoreHierarchyState(View.java:13779)
at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:2053)
at android.app.Activity.onRestoreInstanceState(Activity.java:1027)
at android.app.Activity.performRestoreInstanceState(Activity.java:982)
at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1168)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2437)
... 11 more
如果你有任何想法,请帮助我! 谢谢你抽出时间

ps:CodeActivityBase包含导航视图

private void initNavigationMenu() {
    Menu menu = mNavigationView.getMenu();
    menu.clear();

    AccountItem.Policy policy = MoneyAccountHelper.getCurrentAccount(getApplicationContext()).getPolicy();

    menu.add(MENU_GROUP_1, MENU_CASHBOOK, MENU_CASHBOOK, R.string.navigation_cashbook)
            .setIcon(R.drawable.ic_cashbook)
            .setCheckable(true)
            .setEnabled(policy.transaction.view)
            .setVisible(!MoneyConfig.NAVIGATION_ITEM_GONE_ENABLE || policy.transaction.view);


    menu.add(MENU_GROUP_1, MENU_DEBTS, MENU_DEBTS, R.string.navigation_debt_manager)
            .setIcon(R.drawable.ic_debts)
            .setCheckable(true)
            .setEnabled(policy.debt.view)
            .setVisible(!MoneyConfig.NAVIGATION_ITEM_GONE_ENABLE || policy.debt.view);

    menu.add(MENU_GROUP_1, MENU_TRENDS, MENU_TRENDS, R.string.statistic_trends)
            .setIcon(R.drawable.ic_trends)
            .setCheckable(true);

    menu.add(MENU_GROUP_1, MENU_CATEGORIES, MENU_CATEGORIES, R.string.navigation_category_manager)
            .setIcon(R.drawable.ic_category_manager)
            .setEnabled(policy.category.view)
            .setCheckable(true)
            .setVisible(!MoneyConfig.NAVIGATION_ITEM_GONE_ENABLE || policy.category.view);

    menu.add(MENU_GROUP_PLANNING, TRY_LINKED_WALLET, TRY_LINKED_WALLET, R.string.connect_to_bank)
            .setChecked(false)
            .setIcon(R.drawable.ic_link);

    if (MoneyConfig.ENABLE_SCAN_RECEIPT) {
        menu.add(MENU_GROUP_PLANNING, MENU_SCAN_RECEIPT, MENU_SCAN_RECEIPT, R.string.scan_receipt_title)
                .setIcon(R.drawable.ic_scan_receipt)
                .setCheckable(false)
                .setEnabled(policy.transaction.add)
                .setVisible(!MoneyConfig.NAVIGATION_ITEM_GONE_ENABLE || policy.transaction.add);
    }
    menu.add(MENU_GROUP_PLANNING, MENU_BUDGETS, MENU_BUDGETS, R.string.navigation_budget)
            .setIcon(R.drawable.ic_budget)
            .setCheckable(true)
            .setEnabled(policy.budget.view)
            .setVisible(!MoneyConfig.NAVIGATION_ITEM_GONE_ENABLE || policy.budget.view);

    menu.add(MENU_GROUP_PLANNING, MENU_SAVINGS, MENU_SAVINGS, R.string.navigation_campaign)
            .setIcon(R.drawable.ic_savings)
            .setCheckable(true)
            .setEnabled(policy.saving.view)
            .setVisible(!MoneyConfig.NAVIGATION_ITEM_GONE_ENABLE || policy.saving.view);

    menu.add(MENU_GROUP_PLANNING, MENU_EVENTS, MENU_EVENTS, R.string.navigation_event)
            .setIcon(R.drawable.ic_events)
            .setCheckable(true)
            .setEnabled(policy.event.view)
            .setVisible(!MoneyConfig.NAVIGATION_ITEM_GONE_ENABLE || policy.event.view);

    menu.add(MENU_GROUP_PLANNING, MENU_TRAVEL, MENU_TRAVEL, R.string.navigation_travel_mode)
            .setIcon(R.drawable.ic_travel_mode)
            .setEnabled(policy.event.view)
            .setVisible(!MoneyConfig.NAVIGATION_ITEM_GONE_ENABLE || policy.event.view);

    addSwitchForTravel(MoneyPreference.App().getTravelModeStatus());

    menu.add(MENU_GROUP_PLANNING, MENU_BILLS, MENU_BILLS, R.string.navigation_bill)
            .setIcon(R.drawable.ic_bills)
            .setCheckable(true)
            .setEnabled(policy.bill.view)
            .setVisible(!MoneyConfig.NAVIGATION_ITEM_GONE_ENABLE || policy.bill.view);

    menu.add(MENU_GROUP_PLANNING, MENU_RECURRING, MENU_RECURRING, R.string.repeat_transaction_manager)
            .setIcon(R.drawable.ic_recurring_transaction)
            .setCheckable(true)
            .setEnabled(policy.recurring.view)
            .setVisible(!MoneyConfig.NAVIGATION_ITEM_GONE_ENABLE || policy.recurring.view);

    menu.add(MENU_GROUP_ML, MENU_STORE, MENU_STORE, R.string.navigation_store)
            .setCheckable(false)
            .setIcon(R.drawable.ic_store);

    menu.add(MENU_GROUP_ML, MENU_BLOG, MENU_BLOG, getString(R.string.explore_money_lover))
            .setCheckable(false)
            .setIcon(R.drawable.ic_app_icon);

    if (MoneyApplication.MODE == MoneyApplication.MODE_OFFLINE) {
        menu.removeItem(MENU_PROFILE);
        menu.add(MENU_GROUP_ML, MENU_LOGIN, MENU_LOGIN, R.string.login_or_register)
                .setCheckable(false)
                .setIcon(R.drawable.ic_cloud);
    } else {
        menu.removeItem(MENU_LOGIN);
        menu.add(MENU_GROUP_ML, MENU_PROFILE, MENU_PROFILE, R.string.cloud_manager_title)
                .setCheckable(false)
                .setIcon(R.drawable.ic_cloud);
    }

    menu.add(MENU_GROUP_OTHERS, MENU_TOOLS, MENU_TOOLS, R.string.navigation_tools)
            .setCheckable(false)
            .setIcon(R.drawable.ic_tools);


    menu.add(MENU_GROUP_OTHERS, MENU_HELP_FEEDBACK, MENU_HELP_FEEDBACK, R.string.cashbook_contentdescription_help_support)
            .setCheckable(false)
            .setIcon(R.drawable.ic_help);

    menu.add(MENU_GROUP_OTHERS, MENU_SETTINGS, MENU_SETTINGS, R.string.navigation_settings)
            .setCheckable(false)
            .setIcon(R.drawable.ic_settings);

    if (!PermissionUtils.checkBuyFullFeature(this)) {
        menu.add(MENU_GROUP_OTHERS, 19, 19, "");
    }

    try {
        listBadge = BadgeUtils.getArrayListBadgeFromPref();
    } catch (JSONException e) {
        Logger.e(TAG, "K bóc dc json new item");
        e.printStackTrace();
    }

    showBadgeNewItem(listBadge);
}

当尝试还原
导航视图的状态时,系统发现一个新的菜单项(具有新的项目id)具有操作视图,而保存状态时没有。然后,它尝试通过传递
null
状态来恢复该操作视图的状态


要避免这种情况,请确保使用操作视图的菜单项不会动态更改,也不要使用
NavigationView

LoginActivity:登录屏幕

MainActivityDrawer有很多抽屉菜单片段

startActivityLoginMainActivityDrawer并带有标志IntentclearTop时,我遇到了这个错误

然后我就变清楚了

 public static void startActivityWithClearTop(Context context, Class<?> cls) {
        Intent intent = new Intent();
        intent.setClass(context, cls);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        context.startActivity(intent);
    }


现在它也可以工作了。

发布源代码添加java代码manSorry Patel和W4R10CK,我不知道activitybase.javaThank Blade的确切位置错误发布代码,但我无法更改NavigationView。不使用NavigationView,实现自己的材质设计菜单非常容易。您只需要在LinearLayout中使用TextView,在ScrollView中使用TextView。
public static void startActivity(Context context, Class<?> cls) {
        Intent intent = new Intent();
        intent.setClass(context, cls);
        context.startActivity(intent);
    }
public static FriendFragment getInstance() {
        Bundle args = new Bundle();
        if (friendFragment == null){
            friendFragment  = new FriendFragment();
        }
        friendFragment.setArguments(args);
        return friendFragment;
    }
public static FriendFragment getInstance() {
        Bundle args = new Bundle();
        if (friendFragment == null){
            friendFragment  = new FriendFragment();
            friendFragment.setArguments(args);
        }
        return friendFragment;
    }