Meituan-Dianping / Robust

Robust is an Android HotFix solution with high compatibility and high stability. Robust can fix bugs immediately without a reboot.
Apache License 2.0
4.4k stars 806 forks source link

加载补丁报Attempt to invoke virtual method 'java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[])' on a null object reference #356

Open wwzlp opened 4 years ago

wwzlp commented 4 years ago

只要方法内含有匿名内部类,就算不改那段代码,我最后面showToast,showToast成功了,但是上面老代码执行失败? 竟然还影响到原来逻辑,这修复的啥

异常类型:app运行时异常/编译异常

手机型号:如:平板

手机系统版本:如:Android 5.0

Robust版本:如:0.4.90

Gradle版本:如:3.0.1

系统:如:Mac

堆栈/日志: image

原代码:

/**
 * 确认合并
 */
private void showConfirmMergeDialog(final String toStyle) {
    MPAlertDialog dialog = new MPAlertDialog(getActivity(), getString(R.string.tip), "请在确保当前无未配商品的情况下修改合并商品展示!", getString(R.string.cancel), new String[]{getString(R.string.confirm)}, null, MPAlertDialog.Style.Alert, new OnItemClickListener() {
        @Override
        public void onItemClick(Object o, int position) {
            if (position == 0) {
                goodsStyle = toStyle;
                isMerge = GOODS_STYLE_MERGE.equals(goodsStyle);
                initView();
            }
        }
    });
    dialog.show();
}

测试修复代码:

/**
 * 确认合并
 */
@Modify
private void showConfirmMergeDialog(final String toStyle) {
    showConfirmMergeDialogFix(toStyle);
}

@Add
public void showConfirmMergeDialogFix(final String toStyle) {
    MPAlertDialog dialog = new MPAlertDialog(getActivity(), getString(R.string.tip), "请在确保当前无未配商品的情况下修改合并商品展示!如任有未配商品,修改样式后回导致数据错乱。", getString(R.string.cancel), new String[]{getString(R.string.confirm)}, new String[]{}, MPAlertDialog.Style.Alert, new OnItemClickListener() {
        @Override
        public void onItemClick(Object o, int position) {
            if (position == 0) {
                goodsStyle = toStyle;
                isMerge = GOODS_STYLE_MERGE.equals(goodsStyle);
                initView();
            }
        }
    });
    dialog.show();
}