Ric*_*ral 2 methods android dalvik android-1.6-donut
我试图将以下类添加到我的应用程序:
public class AlertDialogHelper {
public static AlertDialog.Builder getDarkDialogBuilder(Context context) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
int alertDialogTheme = AlertDialog.THEME_HOLO_DARK;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
alertDialogTheme = AlertDialog.THEME_DEVICE_DEFAULT_DARK;
}
return new AlertDialog.Builder(context, alertDialogTheme);
}
return new AlertDialog.Builder(context);
}
public static AlertDialog getDeleteNoteDialog(Context context, OnClickListener deleteListener) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage(R.string.dialog_delete_message);
builder.setPositiveButton(R.string.button_delete, deleteListener);
builder.setNegativeButton(R.string.button_cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
return builder.create();
}
}
Run Code Online (Sandbox Code Playgroud)
无论何时何地AlertDialogHelper.getDeleteNoteDialog(this, null)在Android 1.6上运行时我都会调用,我收到以下错误:
03-28 18:56:07.828: E/dalvikvm(303): Could not find method android.app.AlertDialog$Builder.<init>, referenced from method net.ricardoamaral.apps.notificationagenda.AlertDialogHelper.getDarkDialogBuilder
03-28 18:56:07.828: W/dalvikvm(303): VFY: unable to resolve direct method 40: Landroid/app/AlertDialog$Builder;.<init> (Landroid/content/Context;I)V
03-28 18:56:07.828: W/dalvikvm(303): VFY: rejecting opcode 0x70 at 0x0010
03-28 18:56:07.828: W/dalvikvm(303): VFY: rejected Lnet/ricardoamaral/apps/notificationagenda/AlertDialogHelper;.getDarkDialogBuilder (Landroid/content/Context;)Landroid/app/AlertDialog$Builder;
03-28 18:56:07.828: W/dalvikvm(303): Verifier rejected class Lnet/ricardoamaral/apps/notificationagenda/AlertDialogHelper;
Run Code Online (Sandbox Code Playgroud)
这适用于1.6以上的任何其他版本.说实话,我只在2.1,2.3和4.0上测试过.我认为它也适用于所有其他人(虽然可能不是这样).
如果我在AlertDialogHelper类中注释第一个方法(错误是抱怨的那个),那么错误就会发生.但我需要其他方法的方法,如果我也调用该方法,错误也会出现.
没有反思的解决方案:
为了解决这个问题,我将以下类作为嵌套类添加到AlertDialogHelper:
private static class Compatibility {
public static AlertDialog.Builder createAlertDialogBuilder(Context context, int alertDialogTheme) {
return new AlertDialog.Builder(context, alertDialogTheme);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在该getDarkDialogBuilder方法中,而不是调用此:
return new AlertDialog.Builder(context, alertDialogTheme);
Run Code Online (Sandbox Code Playgroud)
我这叫:
return Compatibility.createAlertDialogBuilder(context, alertDialogTheme);
Run Code Online (Sandbox Code Playgroud)
这就是我一直在修复类似问题的方法,到目前为止我还没有遇到任何与此方法有关的问题.
我的猜测是getDarkDialogBuilder你在里面调用双参数构造函数AlertDialog.Builder(Context context, int theme).这是在API级别11中引入的.对于早期的API级别,您只能使用单参数构造函数:AlertDialog.Builder(Context context).
顺便说一句,如果您发布了代码的相关部分,它将提高您从此论坛获得的帮助质量.如果在注释掉方法时问题消失了getDarkDialogBuilder,那么您应该发布方法的整个源代码.
| 归档时间: |
|
| 查看次数: |
1598 次 |
| 最近记录: |