Android库和资源

时间:2013-11-29 20:07:21

标签: android android-manifest android-context

我有一个主应用程序和一个库,都是eclipse中的Android项目。我将库添加到主应用程序中。

问题是我正在尝试从库的一个类中从主应用程序的Manifest访问某些资源,但它不起作用。我甚至使用主应用程序上下文但仍然给我错误。这就是它所说的:

11-29 21:04:33.808: E/AndroidRuntime(31266): java.lang.RuntimeException: Unable to     start activity ComponentInfo{mypackage.name/mypackage.name.MainActivity}:     android.content.res.Resources$NotFoundException: String resource ID #0x0
11-29 21:04:33.808: E/AndroidRuntime(31266):    at     android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2306)
11-29 21:04:33.808: E/AndroidRuntime(31266):    at     android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
11-29 21:04:33.808: E/AndroidRuntime(31266):    at     android.app.ActivityThread.access$600(ActivityThread.java:156)
11-29 21:04:33.808: E/AndroidRuntime(31266):    at     android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)
11-29 21:04:33.808: E/AndroidRuntime(31266):    at     android.os.Handler.dispatchMessage(Handler.java:99)
11-29 21:04:33.808: E/AndroidRuntime(31266):    at     android.os.Looper.loop(Looper.java:153)

这里是代码:

public AndroidPopup(Activity c)
    {
        gameName = c.getString(c.getApplicationInfo().labelRes);
...
 }

发生了什么事?参数是我想要提取值的主要活动......

编辑:好的,现在我已经意识到,即使我试图在主应用程序中获取这些资源,它们也会崩溃......

2 个答案:

答案 0 :(得分:1)

你的问题是labelRes等于0,我很确定你是否在应用程序的代码中使用它,你会遇到同样的问题。

你最好使用它:

public AndroidPopup(Activity c){
    ApplicationInfo appInfo = c.getApplicationInfo();
    String gameName = (String) c.getPackageManager().getApplicationLabel(appInfo);
    // ...
}

答案 1 :(得分:1)

您无法直接从库中的主应用访问资源。我在类似情况下所做的是在库中定义一个方法,该方法除了在库代码中使用之外什么都不做

public string getLabelRes()
{
    return null;
}

并在主应用程序中创建一个类,该类继承自您实际获取资源的库类:

@Override
public string getLabelRes()
{
    return c.getString(c.getApplicationInfo().labelRes);
}

此解决方案允许您以面向对象的方式在许多应用程序中重用相同的库。