我真的不知道为什么,但我无法检索字符串的Id.
这是我的代码:
int resId = getApplicationContext().getResources()
.getIdentifier("About_EmailPrompt", "string", "com.yoki.android.cat");
Run Code Online (Sandbox Code Playgroud)
但它适用于所有其他类的R文件:
int resId = getApplicationContext().getResources()
.getIdentifier("arrow","drawable", "com.yoki.android.cat");
Run Code Online (Sandbox Code Playgroud)
所以我真的不明白这里发生了什么,有什么想法吗?
Igo*_*nov 16
此代码看起来像正确的代码:
int resId = getApplicationContext().getResources().getIdentifier("About_EmailPrompt", "string", "com.yoki.android.cat");
Run Code Online (Sandbox Code Playgroud)
它应该工作,但如果没有,我建议你不要试图绕过这个并试着理解为什么它不起作用:
1)首先尝试在项目/项目中找到下一个声明的字段:
About_EmailPrompt
Run Code Online (Sandbox Code Playgroud)
如果您使用的是eclips,则应按Ctrl + H并打开Java Search选项卡

如果您获得搜索结果,请转到步骤2,否则请转到步骤3
2)您应该将结果作为层次结构
Run Code Online (Sandbox Code Playgroud)<YOUR_PACKAGE_NAME> -- R -- string -- About_EmailPrompt
2.1)检查您在代码中写入正确的包名称
.getIdentifier("About_EmailPrompt", "string", <YOUR_PACKAGE_NAME>);
Run Code Online (Sandbox Code Playgroud)
2.2)检查你在文字字符串中只使用拉丁符号:
"About_EmailPrompt"
Run Code Online (Sandbox Code Playgroud)
和
"string"
Run Code Online (Sandbox Code Playgroud)
2.3)检查你在name属性中只使用拉丁符号strings.xml
<string name="About_EmailPrompt">SOME_VALUE</string>
Run Code Online (Sandbox Code Playgroud)
3)如果您没有搜索结果
3.1)检查你在文字字符串中只使用拉丁符号:
"About_EmailPrompt"
Run Code Online (Sandbox Code Playgroud)
3.2)检查你在name属性中只使用拉丁符号strings.xml
<string name="About_EmailPrompt">SOME_VALUE</string>
Run Code Online (Sandbox Code Playgroud)
3.3)对所有项目进行清理和构建
PS如果这对您没有帮助,请尝试重新启动IDE(有时eclipse会错误地生成R.java,直到重新启动)
作为替代方法,您可以使用反射:
R.string.class.getField("string_name").getInt(null);
Run Code Online (Sandbox Code Playgroud)
这主要通过按名称获取类的字段然后获取整数值来实现.
我们传递null作为对象,因为生成的所有资源字段都是静态的,因此不是对象的一部分.
你可能需要处理一些异常(NoSuchFieldException等),以防你输入错误,但它确实有效.
我已经设法在我的应用程序中获得了一个有效的解决方案。因此,根据原始问题,您需要将其更改如下:
int resId = getApplicationContext().getResources()
.getIdentifier("com.yoki.android.cat:string/About_EmailPrompt", null, null);
Run Code Online (Sandbox Code Playgroud)
这是另一种编写 getIdentifier() 方法的方法,但它似乎是这样工作的。
Ped*_*nho -3
我有这个功能:
public static int getDrawable(Context context, String name)
{
Assert.assertNotNull(context);
Assert.assertNotNull(name);
return context.getResources().getIdentifier(name,
"drawable", context.getPackageName());
}
public static int getString(Context context, String name)
{
Assert.assertNotNull(context);
Assert.assertNotNull(name);
return context.getResources().getIdentifier(name,
"strings", context.getPackageName());
}
Run Code Online (Sandbox Code Playgroud)
我认为你应该使用字符串而不是字符串
| 归档时间: |
|
| 查看次数: |
12452 次 |
| 最近记录: |