是否可以使用应用程序项目中库项目中定义的类似字符串的资源?如果是,怎么做?
因为我似乎无法像这样解析我想要解析的字符串:
String title=“sample”;
int id=ressources.getIdentifier(标题,“字符串”、“com.package”);
给我这个例外
警告/资源类型(278):获取资源号0x00000000的值时没有包标识符
WARN/System.err(278):android.content.res.Resources$NotFoundException:String resource ID#0x0
我要寻找的字符串(“示例”)肯定在库项目的strings.xml中提供的这个包中。我甚至可以在R.java中看到它
看来
int id=ressources.getIdentifier(标题,“字符串”、“com.package”)
正在返回0,表示找不到指定的资源。由于0不是有效的资源id,对resources.getIdentifier()的后续调用会导致异常
以下是一些调试/备选方案:
-
您可能已经做了十几次了,但这并不妨碍您提及:首先,请重新检查所有内容的拼写:
- 包拼写正确(在库项目和客户项目中)
- 资源字符串正确(库项目和客户端项目)
uses library元素AndroidManifest.xml中的库拼写是否正确- 等等
- 您是否可以访问该库中的任何资源,或者问题是否特定于该资源(
title)或特定于该类型的资源(字符串)?你能访问其他图书馆的资源吗
- 您是否以jar文件的形式访问库?您可以jar代码,但不能从jar访问资源
Android-是否可以创建一个自定义库来跨多个应用程序使用
- 您是否尝试了备用名称格式:
代码
String fullyQualifiedResourceName=“com.package:String/sample”;
int id=ressources.getIdentifier(title,null,null);
如果(id==0){
Log.e(标记“资源的查找id'”+fullyQualifiedResourceName+“'failed”);
//这里有优雅的错误处理代码
}
- 您可以尝试使用反射:
代码
最终字符串resourceName=“sample”;
最终int id;
试一试{
最终类resourceType=com.package.R.string.Class;
最终字段=resourceType.getField(标题);
id=field.getInt(null);
}捕获(最终异常e){
Log.e(标记“资源的查找id'”+resourceName+“'failed”);
//这里有优雅的错误处理代码
}
Android,从字符串中获取资源ID
http://daniel-codes.blogspot.com/2009/12/dynamically-retrieving-resources-in.html