2016-08-24 82 views
-1

我在我的程序中使用AutoCompleteTextView,在这里我显示从JSON和我JSON建议得到ArrayList中值的样子:AutoCompleteTextView基于位置

{"areas":[{"area_id":"1","area_name":"Area 1"},{"area_id":"2","area_name":"Area 2"}],"success":1} 

这里是AutoCompleteTextView代码与OnItemClick一起:

textArea.setAdapter(stringArrayAdapterAreas); 

textArea.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

        // along with name, I also want to fetch Id of that particular area 

        autoAreaName = (String) parent.getItemAtPosition(position); 
        Log.d("AreaName:", autoAreaName); // getting accurate area name 

        if(areaArrayList.contains(autoAreaName)) { 

         // how to get area id using area name 

        } 

       } 
      }); 

守则Areas,从web服务

 if (success == 1) { 
    JSONArray jsonArray = response.getJSONArray("areas"); 

    for (int i = 0; i < jsonArray.length(); i++) { 

    JSONObject jsonObject = jsonArray.getJSONObject(i); 

    Area area = new Area(); 
    area.setId(jsonObject.getInt("area_id")); 
    area.setName(jsonObject.getString("area_name")); 

    // adding area to areas array 
    stringArrayListAreas.add(jsonObject.getString("area_name")); 

    areaArrayList.add(area); 

    } // for loop ends 


    } // if ends 

什么是从JSON获得两个值(区域ID和名称)的最好方法?

修订

public String toString(){ 
    return id+":"+name; 
} 

活动

textArea.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      Area area = new Area(); 
      Log.d("areaData:", area.toString()); 

     } 
    }); 

滞后说

D/areaData:: 0:null 
+0

是的。我知道我犯了一些错误,这个问题确实值得消极评分...但是我仍然很开心,因为我尝试了我所得到的,现在我正在寻找建议/指导方针 – Oreo

回答

1

从 JSON获取两个值(区域ID和名称)的最佳方式是什么?

最好的方法是将您正在馈送到AutoCompleteTextView的适配器与包含两个信息的模型类绑定。例如。

public class Model { 
    public String name; 
    public String area_id; 

    public void toString() { 
     return name; 
    } 
} 

你将不得不改变你的代码来使用这个类。在您的onItemClick你会转换为Model,而不是String,并访问其成员提取所需的信息

+0

请检查上面的UPDATED部分,我发布了我的试图按照你教授 – Oreo

+0

的方式获取信息,如果你用Area对象喂食适配器,你将不得不使用'Area area =(Area)parent.getItemAtPosition(position);' – Blackbelt

+0

真的很抱歉,但仍然得到:java。 lang.ClassCastException:java.lang.String不能转换 – Oreo

0

首次使用适配器模型类来获取和设置的详细信息,然后坐上itemclicklister数据,如:

((DataModel)listview.getAdapter().getItem(position)).getarea_id();