gpt4 book ai didi

android - 仅在 Android 1.6 上出现奇怪的错误(找不到方法)

转载 作者:太空狗 更新时间:2023-10-29 16:07:48 24 4
gpt4 key购买 nike

我已尝试将以下类添加到我的应用中:

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

}

在 Android 1.6 上运行时,无论何时何地调用 AlertDialogHelper.getDeleteNoteDialog(this, null),我都会收到以下错误:

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;

这在 1.6 以上的任何其他版本上都可以正常工作。老实说,我只在 2.1、2.3 和 4.0 上测试过这个。我认为它也适用于所有其他人(尽管可能不是真的)。​​

如果我在 AlertDialogHelper 类(错误提示的那个)中注释第一个方法,错误就消失了。但我需要该方法来做其他事情,如果我也调用该方法,错误仍然会出现。

无需反射(reflection)的解决方案:

为了解决这个问题,我将以下类作为嵌套类添加到 AlertDialogHelper:

private static class Compatibility {
public static AlertDialog.Builder createAlertDialogBuilder(Context context, int alertDialogTheme) {
return new AlertDialog.Builder(context, alertDialogTheme);
}
}

然后,在 getDarkDialogBu​​ilder 方法中,而不是调用它:

return new AlertDialog.Builder(context, alertDialogTheme);

我称之为:

return Compatibility.createAlertDialogBuilder(context, alertDialogTheme);

这就是我一直在解决类似问题的方法,到目前为止我还没有遇到任何问题。

最佳答案

我的猜测是,在 getDarkDialogBu​​ilder 中,您正在调用双参数构造函数 AlertDialog.Builder(Context context, int theme)。这是在 API 级别 11 中引入的。对于早期的 API 级别,您只有单参数构造函数可用:AlertDialog.Builder(Context context)

顺便说一句,如果您发布代码的相关部分,将会提高您从该论坛获得的帮助的质量。如果注释掉 getDarkDialogBu​​ilder 方法后问题消失,那么您应该发布该方法的完整源代码。

关于android - 仅在 Android 1.6 上出现奇怪的错误(找不到方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9914051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com