我没有获得完美的价值,根据微调器上的名称获取ID onitemselected

时间:2017-07-08 12:33:43

标签: android json spinner

我试图将一些数据从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。

1 个答案:

答案 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();
}