首页 > 解决方案 > 将列表转换为数组并在android中的微调器中显示

问题描述

我使用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);

如何在微调器中显示猫的标题?

示例:
猫:

[{    
    "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()”

标签: androidandroid-spinner

解决方案


除非我误解了什么,否则你所要做的就是:

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

推荐阅读