9

我正在做一个新项目。。。我是为另一个国家/地区市场制作的,当我从一个旧项目复制代码时,它显示出一些错误,如MIGRATE ANDROID code(从ADT 14开始,资源字段不能用作切换案例)。这种情况发生在strings.xml文件和布局中的资源。但它并没有给我任何可能的解决办法。。。我怎么修????代码如下:

@覆盖public void onCreate(捆绑包savedInstanceState){super.onCreate(savedInstanceState);//这里有个错误setContentView(R.layout.main);//Kreira AlertDialog sa dva dugmeta koji ce se pojaviti pri aktivranju aplikacije公司ad=新AlertDialog。生成器(this).create();//还有这里ad.setTitle(getString(R.string.vasa_trenutna_lokacija));//还有这里ad.setMessage(getString(R.string.da_bi_ste_koristili_aplikaciju));//还有这里ad.setButton(DialogInterface.BUTTON_POSITIVE,getString(R.string.dozvoli),新的DialogInterface。OnClickListener(){//Klikom na dugme Dozvoli otvara se novi prozor公司@覆盖public void onClick(DialogInterface ad,int which){意向i=新意向(NiskiMerakActivity.this,TrenutnaLocacija.class);启动活动(i);finish();}});ad.setButton(DialogInterface.BUTTON_NEGATIVE,getString(R.string.ne_dozvoli),新的DialogInterface。OnClickListener(){//Klikom na dugme Ne dozvoli aplikacija se zatvara公司@覆盖public void onClick(DialogInterface对话框,int which){finish();}});
4
  • 1
    请张贴您的日志。我希望,您不会因为在类中导入R文件而出错。 评论 2011年10月25日13:25
  • 您遇到了什么错误或异常?????? 评论 2011年10月25日13:31
  • 我真蠢!!!!我进口了安卓。R、 但由于某些原因,它并没有全部从R中导入。我在和添加了。*现在看起来它很好!!!谢谢。。。。把它当作一个答案,我会核实它的真实性。。。 评论 2011年10月25日15:12
  • @jovan你不应该导入android。R(右)
    – 库奇
    评论 2012年1月27日6:01

10个答案10

重置为默认值
13

报价http://tools.android.com/tips/noconstant-fields(http://tools.android.com/tips/noconstant-fields)

解决方法很简单:将switch语句转换为if-else语句。

由于上面的代码段似乎没有开关()声明,但您的问题是指开关()声明,我想你的代码是错的。

1
  • 在我的问题下面看到评论。。。但它指的是switch语句。。。我不知道为什么。。。无论如何,谢谢……: 评论 2011年10月25日15:14
9

如果您的id开关卡在库中,很遗憾,新的ADT版本不支持它。

然而,你可以很容易地将其转换为if-else,如谷歌网站所示:

http://tools.android.com/tips/nonstant-fields
7

从ADT 14开始,资源字段不能用作交换机案例。

这也发生在我身上,尽管我没有在switch语句中使用R变量,但我还是遇到了这个错误。不要被错误消息误导。您基本上有一些与R.java文件相关的错误。确保不要导入R.java,因为您应该有自己的R.java。删除R.java文件,构建项目,并查看是否生成了R.java文件。如果没有,则可能出现错误,导致R.java文件无法更新。尝试“项目”>“清理”以查找任何错误。消除错误并重新构建项目,以便生成最新的R.java文件。

4
  • 这完全是假的。我使用ADT 16,使用资源字段作为大小写变量,并且我的R文件常量都是最终值。 评论 2012年1月6日20:40
  • 5
    @JasonRobinson在ADT 14时,R常量在库项目中不是最终的。请参见tools.android.com/tips/nonstant-fields(工具.android.com/提示/非恒定字段)
    – 乔赫罗
    评论 2012年7月8日9:01
  • 1
    @johlo也许他们在以后的版本中恢复了更改,因为我的ID肯定是最终的我现在使用ADT 20。 评论 2012年7月8日14:54
  • 1
    请参阅下面的@47lucane答案。在SDK Tools 22.6/SDK Platform-Tools 19.0.1中,切换Is Library属性肯定会在这两种行为之间切换。
    – MZB公司
    评论 2014年3月7日19:05
5

也许你只是需要清洁您的项目,即主菜单中的项目->清理。上述代码中不应有错误。问题只在于转换声明。请尝试清理并在此处评论结果。

1
  • 在我的问题下面看到评论。。。但它指的是switch语句。。。我不知道为什么。。。无论如何,谢谢……: 评论 2011年10月25日15:15
2

我通过更改导入来解决此问题android.r;安卓。R.*;

它清除了我所有的错误,我能够再次编译我的应用程序。

1
  • 您还可以删除导入行以使其更干净。
    – 库奇
    评论 2012年1月27日6:02
1

今天我遇到了同样的错误,我的eclipse项目添加了1个项目库,我打算将所有代码改为if语句,但我意识到我的项目在project->properties->android中检查了库,所以我只是拒绝了它,这就是问题的解决方案,也是eclipses本身的建议,仔细阅读android迁移代码adt14常量项目库警告。

1
  • +1如果勾选了“Is Library”属性,则生成的R文件将标识符声明为“public static int”,而不是“public static final int”,因此会显示错误消息。这大概是为了让标识符在外部可见,而不是让编译器对其进行优化。
    – MZB公司
    评论 2014年3月7日18:57
0

只需在eclipse项目中选择->clean,问题就解决了。我只是通过在我的应用程序中创建一个新包并将其删除,才得到了这个错误。

0

以下是帮助我解决这个问题的步骤。

  1. 删除R.java(Eclipse将立即重新创建它。如果不是,代码或布局有问题)
  2. 清理项目(Eclipse菜单“项目”和“清理”
  3. 重新编译项目

这些步骤解决了我工作中的问题。

2
  • 欢迎使用堆栈溢出!在发布对多个问题的样板/逐字逐句的答案时要小心,这些问题往往会被社区标记为“垃圾邮件”。如果你这样做,通常意味着这些问题是重复的,因此请将它们标记为重复的。
    – Kev公司
    评论 2012年5月14日21:59
  • 感谢Kev的指导。我以后会参考我的答案。 评论 2012年5月18日16:03
0

在更改R的import语句以包含包名称后,我发现它可以工作。

例如:

导入android。R;

现在是

导入com.name.package。R;

1
  • 1
    安卓。R与com.name.package完全不同。R和不可替换 评论 2019年5月21日9:10
0

我尝试了上面提到的关于删除生成的R.java文件、清理、重建等的所有方法,但这种方法对我来说不起作用。

起作用的是用else-if链替换箱子,在我看来,这是一个混乱的修复,但我无法以其他方式使其发挥作用。

我正在使用Eclipse 4.2.1和Android SDK 4.2.2

您的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.