Android资源ID突然不是最终的,字段无法解析

时间:2011-10-25 13:10:07

标签: android string variables resources

我正在开发一个新旧项目...我正在为不同的国家市场制作它,当我从一个旧项目中复制我的代码时,它显示了一些错误,如MIGRATE ANDROID CODE(截至ADT 14) ,资源字段不能用作切换案例。)对于strings.xml文件和布局中的资源,会发生这种情况。 但它并没有给我一些可靠的解决方案......我怎么能解决它????这是代码:

 @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //Here is mistake
            setContentView(R.layout.main);

          //Kreira AlertDialog sa dva dugmeta koji ce se pojaviti pri aktiviranju aplikacije
            ad = new AlertDialog.Builder(this).create();
//And HERE
            ad.setTitle(getString(R.string.vasa_trenutna_lokacija));
            //And HERE
ad.setMessage(getString(R.string.da_bi_ste_koristili_aplikaciju));
            //And HERE
            ad.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.dozvoli), new DialogInterface.OnClickListener() {

            //Klikom na dugme Dozvoli otvara se novi prozor
            @Override
            public void onClick(DialogInterface ad, int which) {
                Intent i = new Intent(NiskiMerakActivity.this, TrenutnaLokacija.class);             
                startActivity(i);
                finish();
                }
            });

            ad.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.ne_dozvoli),new DialogInterface.OnClickListener() {

            //Klikom na dugme Ne dozvoli aplikacija se zatvara
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    finish();

                }
            });

10 个答案:

答案 0 :(得分:12)

引用http://tools.android.com/tips/non-constant-fields

  

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

由于上面的代码段似乎没有switch()语句,但您的问题引用了switch()语句,我认为您的代码错误。

答案 1 :(得分:10)

如果你的ids的开关盒位于一个库中,遗憾的是新的ADT版本不支持它。

但是,您可以轻松将其转换为if-else,如Google的网站所示:

http://tools.android.com/tips/non-constant-fields

答案 2 :(得分:7)

自ADT 14起,资源字段不能用作交换机案例。

这也发生在我身上,即使我没有在switch语句中使用R变量,也遇到了这个错误。不要被错误消息误导。你基本上有一些与R.java文件有关的错误。确保你没有导入R.java,因为你应该拥有自己的.java。删除您的R.java文件,构建项目,并查看是否生成了R.java文件。如果没有,您可能会遇到阻止R.java文件更新的错误。试试Project>清洁以找到任何错误。摆脱错误并重建项目,以便生成R.java文件并使其保持最新状态。

答案 3 :(得分:5)

可能你只需要Clean你的项目,即项目 - >从主菜单中清除。 上面的代码中不应该有错误。问题仅出在switch语句中。 请尝试清理并在此评论结果是什么。

答案 4 :(得分:2)

我通过将导入从android.r;更改为android.R.*;

来解决此问题

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

答案 5 :(得分:1)

今天我遇到了同样的错误,我的eclipse项目添加了1个项目库,我正要将所有代码更改为if语句,但我意识到我的项目已经在项目中检查了库 - >属性 - > android,所以我只是把它关闭,这是问题的解决方案,它也是eclipse本身的建议,仔细阅读android迁移代码adt 14常量警告项目库。

答案 6 :(得分:1)

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

例如:

导入android.R;

现在是

import com.name.package.R;

答案 7 :(得分:0)

只需在eclipse项目中选择 - >干净,问题解决了。我只是在我的应用程序中创建一个新包并删除它,我得到了这个错误。

答案 8 :(得分:0)

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

  1. 删除R.java(Eclipse会立即重新创建它。如果没有,代码或布局有问题)
  2. 清理项目(Eclipse菜单'Project'&'Clean'
  3. 重新编译项目
  4. 这些步骤解决了我的工作问题。

答案 9 :(得分:0)

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

在我看来,用else-if链代替这个案例的工作是什么,但是我无法让它以任何其他方式工作。

我正在使用Eclipse 4.2.1和Android SDK 4.2.2