Sev*_*yev 17 eclipse android compiler-errors
我有一段时间的Java Android项目.今天,我已经将Android开发工具更新为Google的最新版本.而且项目破了 - 我得到了一堆"case表达式必须是常量表达式"的编译错误信息.
事实证明,R.java文件现在以不同方式生成.以前,它会有一堆
public static final int MyID=0x12340000;
Run Code Online (Sandbox Code Playgroud)
报表; 现在,它看起来(在清理/重建之后)像这样:
public static int MyID=0x12340000;
Run Code Online (Sandbox Code Playgroud)
final离开了.所以我拥有的资源ID的所有开关(我都有一些)是错误的.怎么了,拜托?只有我吗?这里的理由是什么?是否记录在任何地方?我能final以某种方式带回来吗?
Phi*_*art 24
这发生在昨天,当SDK/ADT 14发布时:
从ADT 14开始,图书馆项目中的资源常量不再是最终的.这在http://tools.android.com/tips/non-constant-fields中有更详细的解释
ADT 14提供了一个quickfix:http://tools.android.com/recent/switchstatementconversion
引用理由:
组合多个库项目时,字段的实际值(必须是唯一的)可能会发生冲突.在ADT 14之前,所有字段都是最终字段,因此,所有库都必须在使用它们时将所有资源和相关Java代码与主项目一起重新编译.这对性能不利,因为它使构建非常慢.它还阻止了分发不包含源代码的库项目,限制了库项目的使用范围.
字段不再是最终的原因是它意味着库jar可以编译一次并直接在其他项目中重用.除了允许分发二进制版本的库项目(来自r15),这使得构建速度更快.
M. *_*mor 13
只需添加括号即可:
switch (view.getId()) {
case (R.id.view1):
break;
case (R.id.view2):
break;
}
Run Code Online (Sandbox Code Playgroud)
您可以切换到使用 If/Else 语句,警告就会消失。
样本:
@Override
public void onClick(final View v) {
//finds which button was pressed
final int buttonView = v.getId();
String current = fromEditText.getText().toString();
if (buttonView == R.id.bA) {
current += getString(R.string.a);
}
Run Code Online (Sandbox Code Playgroud)
Google 建议您使用if/else 条件
http://tools.android.com/tips/non-constant-fields
要自动更改它们,您可以将插入符号放在关键字上,然后在 Windows 上switch按Alt+ (在 Mac 上按 + ),然后选择将“switch”替换为“if”EnterOptionEnter
| 归档时间: |
|
| 查看次数: |
6269 次 |
| 最近记录: |