android - 将列表转换为数组并在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()”
解决方案
除非我误解了什么,否则你所要做的就是:
for(Category c: cats)
{
yourarray.Add(c.getTitle());
}
推荐阅读
- ruby - 如何将“-t azure://”目标传递给 ruby inspec 脚本?
- reactjs - 调用函数时反应上下文不更新
- python - 如何将大写和标题大小写字符串部分提取到单独的列中
- flutter - 绘制带有卡片列表的下拉菜单
- google-apps-script - 从电子表格创建 PDF 需要将 PDF URL 返回到电子表格
- php - 如何删除最后一个
在 Codeigniter 的 foreach 循环中标记? - python - 如何同时使用 args 和 Question 参数
- python - reticulate [R] 的配置/安装问题
- javascript - 如何使用 jquery 在 datalist 中仅采用最后五个选项并清除 datalist 中的所有其他选项?
- ionic-framework - 离子幻灯片显示低于 ionic 5