从任何类获取Android资源值

时间:2014-04-13 21:23:59

标签: java android scope android-resources

我刚刚开始使用Android编程,而且我仍然对某些概念感到困惑。我会用一个简单的例子告诉你我想要做的事情:

我从远程服务器(PHP / MySQL / JSON)检索汽车列表并在ListView上显示它们。

这是服务器响应 JSON 结构:

{
    error: null,
    data: {
        cars: [
            {name: "Lamborghini Diablo", color_id: 1},
            {name: "McLaren F1", color_id: 2},
            {name: "Ferrari F355", color_id: 1}
        ]
    }
}

然后我写了 Car 类:

public class Car {

    public String name;
    public int color_id;
    public String color_name;

    public Car(JSONObject data) {
        try {
            this.name = data.getString("name");
            this.color_id = data.getInt("color_id");
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

最后,这是 strings.xml 资源文件的一部分:

<string-array name="color_names">
    <item>White</item>
    <item>Yellow</item>
    <item>Orange</item>
    <item>Red</item>
    <item>Black</item>
</string-array>

当我从服务器获取数据时,有一个for循环来创建Car类的实例,一个用于JSONArray中的每个项目。

我想要做的是从<string-array>获取颜色名称,使用属性color_id作为数组索引,但我找不到获取{{{{}的方法。来自R.array类构造函数的资源。

我该怎么做?

谢谢!

2 个答案:

答案 0 :(得分:1)

  

我想要做的是从中获取颜色名称,   使用属性color_id作为数组索引,但我找不到方法   从Car类构造函数中获取R.array资源。

你的班级必须知道&#34;关于语境&#34; 因为资源只能从Context 获得,所以在这里你需要对构造函数进行一些修改:

public Car(Context c, JSONObject data) {
   // do your stuff
}

现在,您的班级了解当前的上下文,以便您能够获得所需的数据:

String name = c.getResources().getStringArray(R.id.arrayId)[<index>];

希望它能解决你的问题。

答案 1 :(得分:0)

您应该在某些带有应用程序上下文的util类中提供来自res的Car对象或实例化数组的上下文,并提供类似Utils.getColorNameByColorId(int color_id)的API。由于性能的原因,最后一种方法更可取 - 数组只会实例化一次。