Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

android import ressources from library project

is it possible to use ressources like strings that are defined in library projects in the application-projects? if so, how? because i cant seem to resolve the strings i would like to resolve like this:

String title = "sample";
int id = ressources.getIdentifier(title, "string", "com.package");

gives me this exception

WARN/ResourceType(278): No package identifier when getting value for resource number 0x00000000 WARN/System.err(278): android.content.res.Resources$NotFoundException: String resource ID #0x0

the string ("sample") i am looking for is definitely in this package provided in the strings.xml of the library project. i can even see it in the R.java

like image 394
clamp Avatar asked Jan 19 '11 22:01

clamp


2 Answers

So it looks like

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

is returning 0, meaning it can't find the specified resource. The subsequent call to ressources.getIdentifer() causes the exception, since 0 is not a valid resource id.

Here are some debug/alternative ideas:


  • You've probably already done this a dozen times, but it doesn't hurt mentioning: first recheck spelling of everything:

    • package spelling is correct (both in library project and in client project),
    • resource string is correct (library project and client project),
    • is library spelling correct in the uses-library element the AndroidManifest.xml,
    • etc.

  • Can you access any resources in that library or is the problem specific to that resource (title) or is it specific to that type of resource(strings)? Can you access the resources of another library?

  • Are you accessing the library as a jar file? You can jar the code, but you can't access resources from a jar.

Android - Is it possible to create a custom library to use across several applications?


  • Did you try the alternate name format:

Code

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
}

  • You could try using reflection:

Code

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

like image 143
Bert F Avatar answered Sep 21 '22 12:09

Bert F


In your project code, import the R class:

import com.application.libraryproject.R

Then you can reference any string or other xml-defined resource like this:

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

or similar.

like image 37
Quartertone Avatar answered Sep 19 '22 12:09

Quartertone