1

私はこの特定の例外についての報告を受けています、そしてそれは私を困惑させました、それを探し回る運がありませんでした。このアプリは、それに似たものを使用せずに、いくつかの異なるデバイスでテストされています。

奇妙なことに、ユーザーが初めてアプリを実行すると、AlertDialog.Builderが作成されて表示されるためAlertDialog.Building、デバイスでの実際のメソッドである可能性が高くなります。ドキュメントには、APIレベル1以降も存在していると書かれています。

例外は他の問題を参照している可能性がありますか?

例外は、2.3.6を実行しているGT-N7000GalaxyNoteで発生しました。

スタックトレースは難読化されていません。

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)

関係する方法:

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();
}

行143は次のとおりです。

    new AlertDialog.Builder(context, AlertDialog.THEME_HOLO_DARK)

別のパスからの別のスタックトレースもありましたが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)
4

2 に答える 2

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());
}

また、これはTHEME_HOLO_DARKを使用するコードの唯一の部分であるため、そこでのみ発生します。その段階でいろいろなテーマを試していて、うっかり置いてしまったと思います。

于 2012-07-15T20:37:48.433 に答える
3

https://stackoverflow.com/a/12211522/146167で言及されている別の方法

if (Build.VERSION.SDK_INT > 10)
    builder =  new AlertDialog.Builder(getActivity(), R.style.Theme.Sherlock.Dialog);
else
    builder =  new AlertDialog.Builder(getActivity());
于 2013-04-22T13:57:48.857 に答える