Android 从json到AutoCompleteEditText的键值

Android 从json到AutoCompleteEditText的键值,android,json,autocompletetextview,Android,Json,Autocompletetextview,我从JSON获取以下格式的数据 { "success": 1, "message": "done", "data": [ { "name": "Central Construction", "id": 11 }, { "name": "IT", "id": 12 }, { "name": "Marketing", "id": 13

我从JSON获取以下格式的数据

{
    "success": 1,
    "message": "done",
    "data": [
    {
        "name": "Central Construction",
        "id": 11
    },
    {
        "name": "IT",
        "id": 12
    },
    {
        "name": "Marketing",
        "id": 13
    },
    {
        "name": "Sales",
        "id": 14
    }
  ]
}
在我的回答中,我从数据中获取对象并将其存储在模型中

JSONObject parentObject = new JSONObject(response);
JSONArray parentArray = parentObject.getJSONArray("data");
staffData = gson.fromJson(parentArray.toString(),StaffResponseModel.StaffData[].class);
staffName = new ArrayList<String>();
for(StaffResponseModel.StaffData staff : staffData) {
         staffName.add(staff.getName());
         staffName.add(String.valueOf(staff.getId()));
 }
 setUpAutoComplete();
JSONObject parentObject=新的JSONObject(响应);
JSONArray parentArray=parentObject.getJSONArray(“数据”);
staffData=gson.fromJson(parentArray.toString(),StaffResponseModel.staffData[].class);
staffName=newarraylist();
for(StaffResponseModel.StaffData人员:StaffData){
staffName.add(staff.getName());
staffName.add(String.valueOf(staff.getId());
}
setUpAutoComplete();
最后在我的设置中自动完成

final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item,staffName);
        visitingStaffTextView.setAdapter(adapter);
        visitingStaffTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int index, long l) {

                String staff = adapter.getItem(index).toString();

                Toast.makeText(visitorSignInActivity.this,staff,Toast.LENGTH_LONG).show();

            }
        });
final ArrayAdapter adapter=新的ArrayAdapter(这个,R.layout.support\u simple\u spinner\u dropdown\u项,staffName);
访问StaffTextView.setAdapter(适配器);
访问StaffTextView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView AdapterView、视图视图、整型索引、长l){
String staff=adapter.getItem(index.toString();
Toast.makeText(visitorSignInActivity.this,staff,Toast.LENGTH_LONG).show();
}
});
在Toast中,我可以看到所选的名称并在EditText中设置它,但是我当前无法保存所选名称的id,因为我需要使用/发布该名称到服务器。我已经看到了很多关于stackoverflow的问题,并且也试图实现它们,但没有成功

我正在自动完成编辑文本上显示名称。。我需要将id值存储在一个变量中,以便发布到服务器


选择名称后如何获取id有什么建议吗?

按如下方式修改您的模型:

public class StaffResponseModel { 
    public int success; 
    public String message; 
    public List<StaffData> data; 

    public static class StaffData { 
        public String name; 
        public int id; 
    } 
公共类StaffResponseModel{
公众的成功;
公共字符串消息;
公开名单数据;
公共静态类StaffData{
公共字符串名称;
公共int id;
} 
}

然后从json获取数据,如下所示:

StaffResponseModel staffResponseModel = gson.fromJson(response, new TypeToken<StaffResponseModel>(){}.getType());
StaffResponseModel StaffResponseModel=gson.fromJson(response,new-TypeToken(){}.getType());
最后:

staffName = new ArrayList<String>();
for(StaffResponseModel.StaffData staff : staffResponseModel.data) {
     staffName.add(staff.name);
     staffName.add(String.valueOf(staff.id));
}
setUpAutoComplete();
staffName=newarraylist();
for(StaffResponseModel.StaffData人员:StaffResponseModel.data){
staffName.add(staff.name);
staffName.add(String.valueOf(staff.id));
}
setUpAutoComplete();

谢谢大家的回答和评论,我现在通过创建自定义适配器解决了我的问题

解析JSON值

try {
       JSONObject parentObject = new JSONObject(response);
       JSONArray parentArray = parentObject.getJSONArray("data");
       staffData = gson.fromJson(parentArray.toString(), StaffResponseModel.StaffData[].class);
       visitList = new ArrayList<VisitorSignInModel>();
       visitorSignInModel visit;
       for(StaffResponseModel.StaffData staff : staffData) {
           visit = new VisitorSignInModel();
           visit.setName(staff.getName());
           visit.setId(String.valueOf(staff.getId()));
           visitList.add(visit);
       }
       setUpAutoComplete();
    } catch (JSONException e) {
           e.printStackTrace();
      }
试试看{
JSONObject parentObject=新JSONObject(响应);
JSONArray parentArray=parentObject.getJSONArray(“数据”);
staffData=gson.fromJson(parentArray.toString(),StaffResponseModel.staffData[].class);
visitList=newarraylist();
访问者登录模型访问;
for(StaffResponseModel.StaffData人员:StaffData){
visit=新访问者登录模型();
visit.setName(staff.getName());
visit.setId(String.valueOf(staff.getId());
visitList.add(访问);
}
setUpAutoComplete();
}捕获(JSONException e){
e、 printStackTrace();
}
我的setUpAutoComplete函数

private void setUpAutoComplete() {
        final ArrayAdapter<VisitorSignInModel> adapter = new VisitorAdapter(this, R.id.lbl_name, visitList);
        visitingStaffTextView.setAdapter(adapter);

        visitingStaffTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int index, long l) {
                String staff = adapter.getItem(index).getName().toString();
                staffSelectedId = (adapter.getItem(index).getId());
                Toast.makeText(visitorSignInActivity.this, staffSelectedId ,Toast.LENGTH_LONG).show();
            }
        });
    }
private void setUpAutoComplete(){
最终ArrayAdapter=新的VisitorAdapter(此,R.id.lbl_名称,visitList);
访问StaffTextView.setAdapter(适配器);
访问StaffTextView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView AdapterView、视图视图、整型索引、长l){
String staff=adapter.getItem(index.getName().toString();
staffSelectedId=(adapter.getItem(index.getId());
Toast.makeText(visitorSignInActivity.this,staffSelectedId,Toast.LENGTH\u LONG.show();
}
});
}
最后,我创建了一个名为VisitorAdapter的自定义适配器

public class VisitorAdapter extends ArrayAdapter<VisitorSignInModel> {
        Context context;
        List<VisitorSignInModel> items, tempItems, suggestions;

        public VisitorAdapter(Context context, int textViewResourceId, List<VisitorSignInModel> items) {
            super(context, textViewResourceId, items);
            this.context = context;
            this.items = items;
            tempItems = new ArrayList<VisitorSignInModel>(items); // this makes the difference.
            suggestions = new ArrayList<VisitorSignInModel>();
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = convertView;
            if (convertView == null) {
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                view = inflater.inflate(R.layout.row_visitor, parent, false);
            }
            VisitorSignInModel people = items.get(position);
            if (people != null) {
                TextView lblName = (TextView) view.findViewById(R.id.lbl_name);
                if (lblName != null)
                    lblName.setText(people.getName());
            }
            return view;
        }

        @Override
        public Filter getFilter() {
            return nameFilter;
        }

        /**
         * Custom Filter implementation for custom suggestions we provide.
         */
        Filter nameFilter = new Filter() {
            @Override
            public CharSequence convertResultToString(Object resultValue) {
                String str = ((VisitorSignInModel) resultValue).getName();
                return str;
            }

            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                if (constraint != null) {
                    suggestions.clear();
                    for (VisitorSignInModel people : tempItems) {
                        if (people.getName().toLowerCase().contains(constraint.toString().toLowerCase())) {
                            suggestions.add(people);
                        }
                    }
                    FilterResults filterResults = new FilterResults();
                    filterResults.values = suggestions;
                    filterResults.count = suggestions.size();
                    return filterResults;
                } else {
                    return new FilterResults();
                }
            }

            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
                List<VisitorSignInModel> filterList = (ArrayList<VisitorSignInModel>) results.values;
                if (results != null && results.count > 0) {
                    visitList.clear();
                    for (VisitorSignInModel people : filterList) {
                        visitList.add(people);
                        notifyDataSetChanged();
                    }
                }
            }
        };
公共类VisitorAdapter扩展了ArrayAdapter{
语境;
列出项目、临时项目、建议;
公共访问者适配器(上下文上下文、int textViewResourceId、列表项){
super(上下文、textViewResourceId、项);
this.context=上下文;
这个项目=项目;
tempItems=newarraylist(items);//这会产生不同。
建议=新建ArrayList();
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=转换视图;
if(convertView==null){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
视图=充气机。充气(R.layout.row\u访问者,父项,false);
}
visitorsignnmodel people=items.get(position);
如果(人!=null){
TextView lblName=(TextView)view.findViewById(R.id.lbl_名称);
如果(lblName!=null)
lblName.setText(people.getName());
}
返回视图;
}
@凌驾
公共过滤器getFilter(){
返回名称过滤器;
}
/**
*我们提供的自定义建议的自定义筛选器实现。
*/
过滤器名称过滤器=新过滤器(){
@凌驾
public CharSequence ConvertResultString(对象结果值){
字符串str=((VisitorSignInModel)resultValue).getName();
返回str;
}
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
if(约束!=null){
建议。清晰();
用于(访问者签名模型人员:临时项目){
if(people.getName().toLowerCase().contains(constraint.toString().toLowerCase())){
建议。添加(人);
}
}