从图书馆项目中导入Android
-
12-10-2019 - |
题
是否可以使用应用程序项目中图书馆项目中定义的字符串之类的内容?如果是这样,怎么样?因为我似乎无法解决我想这样解决的字符串:
String title = "sample";
int id = ressources.getIdentifier(title, "string", "com.package");
给我这个例外
WARN/RESOUSCETYPE(278):获得资源编号值时无包标识符0x00000000 warn/system.err(278):android.content.res.res.resources $ notfoundException:字符串资源ID#0x0
我正在寻找的字符串(“示例”)肯定是在库项目的字符串中提供的此软件包中。我什至可以在R.Java中看到它
解决方案
所以看起来像
int id = ressources.getIdentifier(标题,“字符串”,“ com.package”);
正在返回 0
, ,这意味着它找不到指定的资源。随后的电话 ressources.getIdentifer()
导致例外,因为 0
不是有效的资源ID。
以下是一些调试/替代思想:
您可能已经做了十二次,但是提及:第一次重新检查所有内容:
- 包拼写是正确的(在库项目和客户端项目中),
- 资源字符串是正确的(库项目和客户端项目),
- 图书馆拼写正确
uses-library
元素AndroidManifest.xml
, - 等等
- 您可以访问该库中的任何资源还是是该资源特定的问题(
title
)还是特定于该类型的资源(字符串)?您可以访问另一个库的资源吗?
- 您是作为JAR文件访问库吗?您可以jar代码,但无法从JAR访问资源。
Android-是否可以创建一个自定义库来在几个应用程序中使用?
- 您是否尝试过替代名称格式:
代码
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
}
http://daniel-codes.blogspot.com/2009/12/dynamacy-retrieving-resources-in.html
其他提示
在您的项目代码中,导入R类:
import com.application.libraryproject.R
然后,您可以引用任何字符串或其他XML定义的资源:
String mystring = getString(R.string.app_name);
或类似。
我也有类似的问题,我解决了 getPackageName()
项目库中的方法。
就您而言,应该是:
String title = "sample";
int id = ressources.getIdentifier(title, "string", getPackageName());
是的,像正常情况一样定义图书馆项目中的资源。然后,通过在库的androidmanifest.xml中使用r类名称预备R类,以导入库的项目中。