我刚刚开始使用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
类构造函数的资源。
我该怎么做?
谢谢!
答案 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。由于性能的原因,最后一种方法更可取 - 数组只会实例化一次。