java.lang.NoSuchMethodError:android.app.AlertDialog $ Builder

gak*_*gak 1 android exception android-alertdialog

我正在收到关于这个特殊异常的报告,它让我很难过,没有任何运气来寻找它.这个应用程序已经在少数几个不同的设备上进行了测试,没有任何类似的东西.

奇怪的是,用户第一次运行应用程序时,AlertDialog.Builder会创建并显示一个,因此AlertDialog.Building很可能是设备上的真实方法.文档还告诉我它自API级别1以来也存在.

例外是否可以指其他一些问题?

例外情况发生在运行2.3.6的GT-N7000 Galaxy Note上.

对堆栈跟踪进行反混淆处理:

java.lang.NoSuchMethodError: android.app.AlertDialog$Builder.
at com.slowchop.wifiheat.lib.heat.Filter.void showSubjectDialog(java.lang.String,java.lang.String)(SourceFile:143)
at com.slowchop.wifiheat.lib.heat.Filter.void showChangeAccessPoint()(SourceFile:128)
at com.slowchop.wifiheat.lib.heat.HeatActivity.boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem)(SourceFile:475)
at android.support.v4.app._ActionBarSherlockTrojanHorse.boolean onMenuItemSelected(int,com.actionbarsherlock.view.MenuItem)(SourceFile:119)
Run Code Online (Sandbox Code Playgroud)

方法包括:

private void showSubjectDialog(String title, final String filter) {
    new AlertDialog.Builder(context, AlertDialog.THEME_HOLO_DARK)
            .setTitle(title)
            .setAdapter(subjectAdapter, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int i) {
                    ListItem item = (ListItem)subjectAdapter.getItem(i);
                    updateFilterFromAlertDialog(dialog, filter, item.id);
                }
            }).show();
}
Run Code Online (Sandbox Code Playgroud)

第143行是:

    new AlertDialog.Builder(context, AlertDialog.THEME_HOLO_DARK)
Run Code Online (Sandbox Code Playgroud)

还有另一个堆栈跟踪来自不同的路径,但继续以showChangeAccessPoint()相同的方式调用.在这种情况下,AlertDialog.Builder从另一个调用错误AlertDialog.Builder!:

java.lang.NoSuchMethodError: android.app.AlertDialog$Builder.
at com.slowchop.wifiheat.lib.heat.Filter.void showSubjectDialog(java.lang.String,java.lang.String)(SourceFile:143)
at com.slowchop.wifiheat.lib.heat.Filter.void showChangeAccessPoint()(SourceFile:128)
at com.slowchop.wifiheat.lib.heat.Filter$2.void onClick(android.content.DialogInterface,int)(SourceFile:85)
at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:935)
Run Code Online (Sandbox Code Playgroud)

gak*_*gak 5

我想我刚刚解决了,THEME_HOLO_DARKAPI等级11.奇怪的是,在运行2.3.3(API级别10)的设备上尝试它时似乎没有问题.

这里提到了一种安全使用它的方法:https://groups.google.com/forum/?fromgroups#!topic/actionbarsherlock/0yNlvDXObAo

AlertDialog.Builder builder;
try {
    builder =  new AlertDialog.Builder(getActivity(), R.style.Theme.Sherlock.Dialog);
} catch (NoSuchMethodError e) {
    Log.e(TAG, "Older SDK, using old Builder");
    builder =  new AlertDialog.Builder(getActivity());
}
Run Code Online (Sandbox Code Playgroud)

此外,这是使用THEME_HOLO_DARK的代码的唯一部分,因此它只发生在那里.我想我正在那个阶段尝试不同的主题,并意外地将它留在那里.