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

私が探している文字列( "sample")は、ライブラリプロジェクトのstrings.xmlで提供されているこのパッケージに間違いなく含まれています。R.javaでも見ることができます

4

4 に答える 4

14

だからそれは

int id = ressources.getIdentifier(title、 "string"、 "com.package");

が返さ0れます。これは、指定されたリソースが見つからないことを意味します。は有効なリソースIDではないため、後続の呼び出しressources.getIdentifer()で例外が発生します。0

ここにいくつかのデバッグ/代替のアイデアがあります:


  • あなたはおそらくこれをすでに十数回行っていますが、言及するのに害はありません:最初にすべてのスペルを再確認してください:

    • パッケージのスペルが正しい(ライブラリプロジェクトとクライアントプロジェクトの両方で)、
    • リソース文字列が正しい(ライブラリプロジェクトとクライアントプロジェクト)、
    • 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-retrieveing-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 に答える