16

是否可以在应用程序项目中使用库项目中定义的字符串等资源?如果是这样,如何?因为我似乎无法解析我想这样解析的字符串:

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

我正在寻找的字符串(“样本”)肯定在库项目的 strings.xml 中提供的这个包中。我什至可以在 R.java 中看到它

4

4 回答 4

14

所以看起来像

int id = ressources.getIdentifier(title, "string", "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
}

Android,从字符串中获取资源ID?

http://daniel-codes.blogspot.com/2009/12/dynamically-retrieving-resources-in.html

于 2011-01-24T00:09:49.267 回答
3

在您的项目代码中,导入 R 类:

import com.application.libraryproject.R

然后您可以像这样引用任何字符串或其他 xml 定义的资源:

String mystring = getString(R.string.app_name);

或类似的。

于 2011-01-19T23:29:11.843 回答
2

我有一个类似的问题,我用getPackageName()项目库中的方法解决了它。

在你的情况下,它应该是:

String title = "sample";
int id = ressources.getIdentifier(title, "string", getPackageName());
于 2011-11-11T18:15:15.913 回答
0

是的,像往常一样定义库项目中的资源。然后在导入库的项目中引用它们,方法是在库的 AndroidManifest.xml 中为 R 类添加包名。

于 2011-01-19T22:30:09.073 回答