是否可以使用在应用程序项目中的库项目中定义的字符串等资源?如果是这样,怎么样? 因为我似乎无法解决我想解决的字符串:
String title = "sample";
int id = ressources.getIdentifier(title, "string", "com.package");
给了我这个例外
WARN / ResourceType(278):获取资源号0x00000000的值时没有包标识符 WARN / System.err(278):android.content.res.Resources $ NotFoundException:字符串资源ID#0x0
我正在寻找的字符串(“sample”)肯定是在这个包中提供的库项目的strings.xml中。我甚至可以在R.java中看到它
答案 0 :(得分:14)
所以它看起来像
int id = ressources.getIdentifier(title,“string”,“com.package”);
正在返回0
,这意味着它无法找到指定的资源。随后对ressources.getIdentifer()
的调用会导致异常,因为0
不是有效的资源ID。
以下是一些调试/替代想法:
你可能已经做了十几次了,但这并没有让人觉得:首先要重新检查所有内容的拼写:
uses-library
元素AndroidManifest.xml
,title
)还是特定于该类型的资源(字符串)?你能访问另一个图书馆的资源吗?Android - Is it possible to create a custom library to use across several applications?
代码
String fullyQualifiedResourceName = "com.package:string/sample";
int id = ressources.getIdentifier(title, null, null);
if (id == 0) {
Log.e(TAG, "Lookup id for resource '"+fullyQualifiedResourceName+"' failed";
// graceful error handling code here
}
代码
final String resourceName= "sample";
final int id;
try {
final Class resourceType = com.package.R.string.class;
final Field field = resourceType.getField(title);
id = field.getInt(null);
} catch (final Exception e) {
Log.e(TAG, "Lookup id for resource '"+resourceName+"' failed";
// graceful error handling code here
}
Android, getting resource ID from string?
http://daniel-codes.blogspot.com/2009/12/dynamically-retrieving-resources-in.html
答案 1 :(得分:3)
在项目代码中,导入R类:
import com.application.libraryproject.R
然后你可以像这样引用任何字符串或其他xml定义的资源:
String mystring = getString(R.string.app_name);
或类似。
答案 2 :(得分:2)
我遇到了类似的问题,我使用项目库中的getPackageName()
方法解决了这个问题。
在你的情况下,它应该是:
String title = "sample";
int id = ressources.getIdentifier(title, "string", getPackageName());
答案 3 :(得分:0)
是的,像正常一样定义库项目中的资源。然后在导入库的项目中引用它们,方法是在库的AndroidManifest.xml中使用包名称前面加上R类。