Как добавить Json Array в список спиннеров? - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть примерный список JSON, как показано ниже, и я попытался вставить его в свой счетчик: -

[{"профессия_идентификатора: 0," имя_моделирования ":" Учитель "}, {"оккупация_ид ": 1," занятие_имя ":" Владелец бизнеса "}]

Когда я пытался применить этот код: -

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

Я получаю это в своем счетчике

enter image description here

Когда я пытался изменить

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()
        )

Я получаю ошибку Неразрешеннаяссылка: род занятий .Если я изменю на list [0] .occupation_name.toList () , я буду показывать имя 1-го занятия с 1 символом в каждой опции раскрывающегося списка.

Как я могу получить правильное имя занятия вкаждый вариант здесь?Пожалуйста, помогите. Спасибо.

Ответы [ 3 ]

1 голос
/ 20 сентября 2019

Когда вы используете ArrayAdapter, вы можете только передать список String (List), вы не можете передать как List, поэтому создайте список, как показано ниже:

    var list = ArrayList<String>()
    .......
    list.add(jsonObject.getString("occupation_name"))
0 голосов
/ 20 сентября 2019

Вы можете написать собственный адаптер для хранения списка данных и переопределить getview, чтобы установить значения в текстовом представлении счетчика.Посмотрите на эту ссылку , чтобы увидеть пример.

0 голосов
/ 20 сентября 2019

Я также сталкивался с тем же при работе с 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;
    }
}

Проверьте, работает ли это для вас.

...