Android 从json到AutoCompleteEditText的键值
我从JSON获取以下格式的数据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
{
"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())){
建议。添加(人);
}
}