Multiautocompletetextview工作不正常 [英] Multiautocompletetextview not working properly

查看:283
本文介绍了Multiautocompletetextview工作不正常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用multiautocomplete TextView的在我的应用程序,这是我与mutltiautocompletetextview使用的项目是JSON,现在,只要用户选择多个值,我需要得到该项目的ID我想是的,我能得到的ID第一个项目而已,..

我的回答

  {
      类别:
   [
  {
  ID:4,
  名:CAT1
  },
  {
  ID:7
   名:阿迪亚}
   ]
 }

JsonParse.java

 公共类JsonParse {
双current_latitude,current_longitude;
公共JsonParse(){}
公共JsonParse(双current_latitude,双current_longitude){
    this.current_latitude = current_latitude;
    this.current_longitude = current_longitude;
}
公开名单< SuggestGetSet> getParseJsonWCF(字符串SNAME)
   {
    清单< SuggestGetSet>的ListData =新的ArrayList< SuggestGetSet>();
    尝试{
       串临时= sName.replace(,%20);
       URL = JS新的URL();
       URLConnection的JC = js.openConnection();
       读者的BufferedReader =新的BufferedReader(新的InputStreamReader(jc.getInputStream()));
       串行= reader.readLine();
       JSONObject的jsonResponse =新的JSONObject(线);
       JSONArray jsonArray = jsonResponse.getJSONArray(类);
       的for(int i = 0; I< jsonArray.length();我++){
           的JSONObject R = jsonArray.getJSONObject(ⅰ);
           ListData.add(新SuggestGetSet(r.getString(ID),r.getString(名称)))​​;
       }
   }赶上(例外E1){
       // TODO自动生成catch块
       e1.printStackTrace();
   }
    返回的ListData;   }
}

SuggestGetSet.java

 公共类SuggestGetSet {
串ID,名称;
公共SuggestGetSet(ID字符串,字符串名称){
    this.setId(ID);
    this.setName(名);
}
公共字符串的getId(){
    返回ID;
}公共无效SETID(字符串ID){
    this.id = ID;
}公共字符串的getName(){
    返回名称;
}公共无效setname可以(字符串名称){
    this.name =名称;
} }

SuggetionAdapter.java

 公共类SuggestionAdapter扩展ArrayAdapter<串GT; {
受保护的静态最后弦乐TAG =SuggestionAdapter;
私人列表<串GT;建议;
公共SuggestionAdapter(Activity上下文,弦乐nameFilter){
    超(背景下,android.R.layout.simple_dropdown_item_1line);
    建议=新的ArrayList<串GT;();
}@覆盖
公众诠释的getCount(){
    返回suggestions.size();
}@覆盖
公共字符串的getItem(INT指数){
    返回suggestions.get(索引);
}@覆盖
公共过滤用getFilter(){
    过滤myFilter =新的过滤器(){
        @覆盖
        保护FilterResults performFiltering(CharSequence的约束){
            FilterResults filterResults =新FilterResults();
            JsonParse JP =新JsonParse();
            如果(约束!= NULL){
                清单< SuggestGetSet> new_suggestions = jp.getParseJsonWCF(constraint.toString());
                suggestions.clear();
                / *的for(int i = 0; I< new_suggestions.size();我++){
                    suggestions.add(new_suggestions.get(ⅰ).getName());
                } * /                的for(int i = 0; I< new_suggestions.size();我++){
                    字符串名称= new_suggestions.get(I).getName();
                    串ID = new_suggestions.get(ⅰ).getId();
                    的System.out.println(checis ID+ ID);                    如果(name.contains(约束)){
                    suggestions.add(new_suggestions.get(ⅰ).getName());
                       }
              }                //现在分配值,并计算到FilterResults
                //对象
                filterResults.values​​ =建议;
                filterResults.count = suggestions.size();
            }
            返回filterResults;
        }        @覆盖
        保护无效publishResults(CharSequence的约束实现的,
                FilterResults结果){
            如果(结果= NULL&放大器;!&安培; results.count大于0){
                notifyDataSetChanged();
            }其他{
                notifyDataSetInvalidated();
            }
        }
    };
    返回myFilter;
}
 }

MainActivity.java

  JsonParse JP =新JsonParse();
              清单<&的NameValuePair GT; PARAMS =新的ArrayList<&的NameValuePair GT;();
              清单< SuggestGetSet>清单= jp.getParseJsonWCF(acTextView.getText()的toString());
              的for(int i = 0; I<则为list.size();我++){
                如果(list.get(I).getName()。等于(acTextView.getText()。的toString()))
                 params.add(新BasicNameValuePair(PARENTID,list.get(ⅰ).getId()));
                的System.out.println(善有善报+参数);
                。CATID = list.get(I).getId()的toString();
              }


解决方案

所以你需要充分catids,所以第一个变化CATID到数组或列表。

 私人列表<串GT; CATID =新的ArrayList<串GT;();

然后更改您的code

 字符串猫[] = acTextView.getText()的toString()分裂()。;
             JsonParse JP =新JsonParse();
             对于(字符串的猫:猫){
                 清单< SuggestGetSet>清单= jp.getParseJsonWCF(acTextView.getText()的toString());
              的for(int i = 0; I<则为list.size();我++){
                如果(list.get(ⅰ).getName()。等于(猫))
                    catid.add(list.get(ⅰ).getId()的toString());
                 //params.add(new BasicNameValuePair(PARENTID,list.get(ⅰ).getId()));
              }
             }

I am using multiautocomplete textview in my app,the items which I use with mutltiautocompletetextview is from json,now What I want is whenever user selects more than one value I need to get id of that item,I am able to get id of first item only,..

My response

 {
      "category":
   [
  {
  "id":"4",
  "name":"cat1"
  },
  {
  "id":"7",
   "name":"aditya"}
   ]
 }

JsonParse.java

public class JsonParse {
double current_latitude,current_longitude;
public JsonParse(){}
public JsonParse(double current_latitude,double current_longitude){
    this.current_latitude=current_latitude;
    this.current_longitude=current_longitude;
}
public List<SuggestGetSet> getParseJsonWCF(String sName)
   {
    List<SuggestGetSet> ListData = new ArrayList<SuggestGetSet>();
    try {
       String temp=sName.replace(" ", "%20");
       URL js = new URL("");
       URLConnection jc = js.openConnection();
       BufferedReader reader = new BufferedReader(new InputStreamReader(jc.getInputStream()));
       String line = reader.readLine();
       JSONObject jsonResponse = new JSONObject(line);
       JSONArray jsonArray = jsonResponse.getJSONArray("category");
       for(int i = 0; i < jsonArray.length(); i++){
           JSONObject r = jsonArray.getJSONObject(i);
           ListData.add(new SuggestGetSet(r.getString("id"),r.getString("name")));
       }
   } catch (Exception e1) {
       // TODO Auto-generated catch block
       e1.printStackTrace();
   }
    return ListData;

   }
}

SuggestGetSet.java

public class SuggestGetSet {
String id,name;
public SuggestGetSet(String id, String name){
    this.setId(id);
    this.setName(name);
}
public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

 }

SuggetionAdapter.java

public class SuggestionAdapter extends ArrayAdapter<String>{
protected static final String TAG = "SuggestionAdapter";
private List<String> suggestions;
public SuggestionAdapter(Activity context, String nameFilter) {
    super(context, android.R.layout.simple_dropdown_item_1line);
    suggestions = new ArrayList<String>();
}

@Override
public int getCount() {
    return suggestions.size();
}

@Override
public String getItem(int index) {
    return suggestions.get(index);
}

@Override
public Filter getFilter() {
    Filter myFilter = new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults filterResults = new FilterResults();
            JsonParse jp=new JsonParse();
            if (constraint != null) {
                List<SuggestGetSet> new_suggestions =jp.getParseJsonWCF(constraint.toString());
                suggestions.clear();
                /*for (int i=0;i<new_suggestions.size();i++) {
                    suggestions.add(new_suggestions.get(i).getName());
                }*/

                for (int i=0;i<new_suggestions.size();i++) {
                    String name=new_suggestions.get(i).getName();
                    String id=new_suggestions.get(i).getId();
                    System.out.println("checis id"+id);

                    if(name.contains(constraint)){
                    suggestions.add(new_suggestions.get(i).getName());
                       }                  
              }

                // Now assign the values and count to the FilterResults
                // object
                filterResults.values = suggestions;
                filterResults.count = suggestions.size();
            }
            return filterResults;
        }

        @Override
        protected void publishResults(CharSequence contraint,
                FilterResults results) {
            if (results != null && results.count > 0) {
                notifyDataSetChanged();
            } else {
                notifyDataSetInvalidated();
            }
        }
    };
    return myFilter;
}
 }

MainActivity.java

          JsonParse jp=new JsonParse();
              List<NameValuePair> params = new ArrayList<NameValuePair>();
              List<SuggestGetSet> list =jp.getParseJsonWCF(acTextView.getText().toString());
              for(int i = 0;i<list.size();i++){
                if(list.get(i).getName().equals(acTextView.getText().toString()))
                 params.add(new BasicNameValuePair("parentid",list.get(i).getId()));
                System.out.println("what goes"+params);
                catid=list.get(i).getId().toString();
              }

解决方案

so you need full catids, so first change catid to array or list.

private List<String> catid=new ArrayList<String>();

then change your code

             String cats[]=acTextView.getText().toString().split(",");
             JsonParse jp=new JsonParse();
             for(String cat:cats){
                 List<SuggestGetSet> list =jp.getParseJsonWCF(acTextView.getText().toString());
              for(int i = 0;i<list.size();i++){
                if(list.get(i).getName().equals(cat))
                    catid.add(list.get(i).getId().toString());
                 //params.add(new BasicNameValuePair("parentid",list.get(i).getId()));


              } 
             }

这篇关于Multiautocompletetextview工作不正常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆