Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从任何类获取Android资源值_Java_Android_Scope_Android Resources - Fatal编程技术网

Java 从任何类获取Android资源值

Java 从任何类获取Android资源值,java,android,scope,android-resources,Java,Android,Scope,Android Resources,我刚开始使用Android编程,对一些概念我还是有点困惑。我将用一个简化的示例告诉您我正在尝试做什么: 我正在从远程服务器(PHP/MySQL/JSON)检索汽车列表,并在列表视图中显示它们 这是服务器响应JSON结构: { error: null, data: { cars: [ {name: "Lamborghini Diablo", color_id: 1}, {name: "McLaren F1", colo

我刚开始使用Android编程,对一些概念我还是有点困惑。我将用一个简化的示例告诉您我正在尝试做什么:

我正在从远程服务器(PHP/MySQL/JSON)检索汽车列表,并在列表视图中显示它们

这是服务器响应JSON结构:

{
    error: null,
    data: {
        cars: [
            {name: "Lamborghini Diablo", color_id: 1},
            {name: "McLaren F1", color_id: 2},
            {name: "Ferrari F355", color_id: 1}
        ]
    }
}
然后我写了汽车课程:

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
中的每个项目

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

我该怎么做


谢谢大家!

您应该为Car对象提供上下文,或者使用app context从某个util类中的res实例化数组,并提供类似于
Utils.getColorNameByColorId(int color\u id)的API
。由于性能原因,最后一种方法更可取-数组将只实例化一次

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

您的类必须知道“关于上下文”,因为资源只能从上下文中获得,所以这里您需要对构造函数进行一些修改:

public Car(Context c, JSONObject data) {
   // do your stuff
}
现在,您的类知道当前上下文,因此您可以获得所需的数据:

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

希望它能解决您的问题。

您能给我一个Utils类的最低代码吗?是静态类吗?它如何知道应用程序上下文?非常感谢。