如何将 Json 数组分配给微调列表?

How to assign Json Array into spinner list?

我有一个 JSON 示例列表,如下所示,我试图将其放入微调器中:-

[{"occupation_id":0,"occupation_name":"Teacher"},{"occupation_id":1,"occupation_name":"Business Owner"}]

当我尝试应用这些代码时:-

val jsonArray = JSONArray(jsonString)

        var list = ArrayList<Occupation>()

        var x = 0
        while (x < jsonArray.length()) {
            var jsonObject = jsonArray.getJSONObject(x)

            list.add(Occupation(
                    jsonObject.getString("occupation_id"),
                    jsonObject.getString("occupation_name")
            ))
            x++
        }

        var spinnerOccupation = findViewById<Spinner>(jasiez.helloworld.jasiez.R.id.spinnerOccupation)
        // Initializing an ArrayAdapter
        val occupationAdapter = ArrayAdapter(
                this, // Context
                android.R.layout.simple_spinner_item,
                list// Array
        )

        occupationAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line)
        spinnerOccupation.adapter = occupationAdapter

我在微调器中得到这个

当我试图改变时

val occupationAdapter = ArrayAdapter(
                this, // Context
                android.R.layout.simple_spinner_item,
                list// Array
        )

val occupationAdapter = ArrayAdapter(
                this, // Context
                android.R.layout.simple_spinner_item,
                list.occupation_name.toList()
        )

我收到错误 未解决的参考:occupation_name。如果我更改为 list[0].occupation_name.toList() 我将在每个下拉列表选项中显示第一个职业名称和 1 个字符。

如何在此处的每个选项中获得正确的职业名称?请help.Thank你

我在处理JSon的时候也遇到过同样的情况。我所做的是 override toString 来自我的对象。在您的情况下,您可以从您的职业对象中覆盖 toString 到您的职业名称。

public class Occupation {
    int occupation_id;
    String occupation_name;

    public Occupation() {
    }

    public int getOccupation_id() {
        return occupation_id;
    }

    public void setOccupation_id(int occupation_id) {
        this.occupation_id = occupation_id;
    }

    public String getOccupation_name() {
        return occupation_name;
    }

    public void setOccupation_name(String occupation_name) {
        this.occupation_name = occupation_name;
    }

    //converts your occupation_name to string
    @NonNull
    @Override
    public String toString() {
        return occupation_name;
        //or you can also add title to your occupation name by doing this
       //return "Occupation: "+ occupation_name;
    }
}

看看这是否适合你。

当你使用ArrayAdapter时,你只能传递String(List)的列表,不能像List一样传递,所以列表如下:

    var list = ArrayList<String>()
    .......
    list.add(jsonObject.getString("occupation_name"))

您可以编写一个自定义适配器来保存您的数据列表,并覆盖 getview 以在微调器的文本视图中设置值。查看 this link 以查看示例。