我试图将一些数据从JSON加载到Android微调器,数据加载完美但是当我尝试获取所选项目的ID时,它显示的是姓氏ID值,无论该项目是什么地选择。
这是我的JSON回复
[{"name":"aaa","id":"1"},
{"name":"bbb","id":"2"},
{"name":"ccc", "id":"3"},
{"name":"ddd", "id":"4"}]
Mainactivity.java
protected void receivedata(final String result){
final ArrayList<String> list = new ArrayList<>();
final ArrayList<GetDataAdapter> datalist = new ArrayList<>();
list.clear();
try{
GetDataAdapter GetDatadp = new GetDataAdapter();
JSONArray jArray = new JSONArray(result);
for(int i=0;i<jArray.length();i++){
JSONObject jsonObject=jArray.getJSONObject(i);
GetDatadp.setName(jsonObject.getString("name"));
GetDatadp.setId(jsonObject.getString("id"));
datalist.add(GetDatadp);
list.add(jsonObject.getString("name"));
}
}
catch(JSONException e){
e.printStackTrace();
}
final ArrayAdapter<String> adapter = new ArrayAdapter<>(this,R.layout.spinner_layout, R.id.txt, list);
sp.setAdapter(adapter);
sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View view, int position, long row_id) {
String id = datalist.get(position).getId();
Toast.makeText(getApplicationContext(),"Value " +id , Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
//Do something
}
}
);
}
GetDataAdapte.java
public class GetDataAdapter {
String name;
String id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
所以,当我试图选择名称aaa / bbb或其他任何显示id值时4.如何显示正确的id。
答案 0 :(得分:1)
避免Adapter和DTO(模型类)之间的命名混淆
Adapter:
Adapter对象充当AdapterView与该视图的基础数据之间的桥梁。适配器提供对数据项的访问。适配器还负责为数据集中的每个项目创建视图。
但是,您理解的问题是因为您在案例中只创建了一个GetDataAdapter
的对象,因此为了获得GetDataAdapter
个对象的有效列表,您必须创建一个新实例在循环中,请查看下面的更新代码:
try{
GetDataAdapter GetDatadp ;
JSONObject jsonObject;
JSONArray jArray = new JSONArray(result);
for(int i=0;i<jArray.length();i++){
jsonObject=jArray.getJSONObject(i);
GetDatadp = new GetDataAdapter();
GetDatadp.setName(jsonObject.getString("name"));
GetDatadp.setId(jsonObject.getString("id"));
datalist.add(GetDatadp);
list.add(jsonObject.getString("name"));
}
}
catch(JSONException e){
e.printStackTrace();
}