Конвертировать список в массив и показать в спиннер в Android - PullRequest
0 голосов
/ 29 сентября 2018

Я использую retrofit2 и получаю список категорий.

Категория модели:

public class Category implements Serializable {   
    @SerializedName("catid")
    private int catid;
    @SerializedName("title")
    private String title;
    @SerializedName("qcount")
    private String qcount;
    public int getCatid() {
        return catid;
    }
    public void setCatid(int catid) {
        this.catid = catid;
    }    
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
}

Модифицированный вызов и обратный вызов:

Call<List<Category>> call =  apiInterface.getCategories();
call.enqueue(new Callback<List<Category>>() {
    @Override
    public void onResponse(Call<List<Category>> call, Response<List<Category>> response) {
        hidePDialog();
        if(response.isSuccessful()){
            List<Category> cats =  response.body();
            //codes to convert cats to array.
            // i need cats title to insert in array.
        }
    }
    @Override
    public void onFailure(Call<List<Category>> call, Throwable t) {
    }
});

Спиннер:

s1= findViewById(R.id.spinner);
ArrayAdapter<String> adap=new ArrayAdapter<String>
        (this, android.R.layout.simple_spinner_item, cat_title);
s1.setAdapter(adap);

Как показать титр кота в счетчике?
Пример:
cats:

[{    
    "catid": 1,
    "title": "windows" 
    },
    {
    "catid": 2,
    "title": "Android",
    }
]

Все вышеперечисленные коды в одном упражнении.
Пожалуйста, помогите мне.
Заранее спасибо.я редактирую деятельность, но она не работает!в чем проблема:

public class NewPostActivity extends AppCompatActivity {
    private  ArrayList<String> cat_title;
    Spinner s1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new_post);
        CatsRequest();
        String[] cat_title1 = (String[]) cat_title.toArray(new String[cat_title.size()]);
        s1= findViewById(R.id.spinner);
        ArrayAdapter<String> adap=new ArrayAdapter<String>
                (this, android.R.layout.simple_spinner_item, cat_title1);
        s1.setAdapter(adap);
        s1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });
    private void CatsRequest(){

        APIInterface apiInterface = APIClient.getClient().create(APIInterface.class);
        Call<List<Category>> call =  apiInterface.getCategories();
        call.enqueue(new Callback<List<Category>>() {
            @Override
            public void onResponse(Call<List<Category>> call, Response<List<Category>> response) {
                hidePDialog();
                if(response.isSuccessful()){
                    List<Category> cats =  response.body();
                    ArrayList<String> cat_title= new ArrayList<String>();
                    for(Category cat: cats){
                        cat_title.add(cat.getTitle());
                    }
                }
            }
            @Override
            public void onFailure(Call<List<Category>> call, Throwable t) {
            }
        });
    }
}

Не удалось запустить.ошибка: вызвано: java.lang.NullPointerException: попытка вызвать виртуальный метод int java.util.ArrayList.size () для пустой ссылки на объект

Ответы [ 3 ]

0 голосов
/ 29 сентября 2018
List<Category> cats =  response.body();
ArrayList<String> titles= new ArrayList<String>();
ArrayList<Integer> ids= new ArrayList<Integer>();//in case you need the ids too
for(Category cat: cats){
    titles.add(cat.getTitle());
    ids.add(cat.getId());
}

Присоединение адаптера к счетчику:

 ArrayAdapter<String> adp = new ArrayAdapter<String>(this,
                          android.R.layout.simple_list_item_1, list);
 adp.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 sp.setAdapter(adp1);//sp is the spinner obj

На случай, если вам нужно вычислить значение идентификатора на основе заголовка

   sp.setOnItemSelectedListener(new OnItemSelectedListener() {
      @Override
      public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
          int id = ids.get(position);//This will be the student id.
      }

      @Override
      public void onNothingSelected(AdapterView<?> parentView) {
        // your code here
      }

    });

Счастливое кодирование.

0 голосов
/ 29 сентября 2018
Ctegory[] categoryArray = cats.toArray(new Category[cats.size()]);
0 голосов
/ 29 сентября 2018

Если я что-то не так понял, все, что вам нужно сделать, это:

    for(Category c: cats)
    {
        yourarray.Add(c.getTitle());
    }
...