2012-07-15 35 views
1

我收到關於這個特殊異常的報告,它讓我難堪,沒有找到任何運氣。這個應用程序已經在少數不同的設備上測試過,沒有任何類似的設備。

奇怪的是,用戶第一次運行應用程序時,會創建並顯示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) 

參與方法:

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) 
+0

提到請問什麼是 「_ActionBarSherlockTrojanHorse」 是另一種方式? – dotty 2012-07-15 20:33:04

+0

@dotty這是一個不幸的名字,不是。 https://groups.google.com/forum/?fromgroups#!topic/actionbarsherlock/BdzoSdOJy6I – 2012-07-15 20:40:51

回答

5

我想我只是工作了,THEME_HOLO_DARKAPI level 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,因此爲什麼它只是發生在那裏的代碼的一部分。我認爲我在這個階段嘗試了不同的主題,並且意外地將它留在了那裏。