如何使用Android中的webservice纠正AutoCompleteTextView中的搜索下拉列表?

如何使用Android中的webservice纠正AutoCompleteTextView中的搜索下拉列表?,android,android-asynctask,autocompletetextview,android-textwatcher,Android,Android Asynctask,Autocompletetextview,Android Textwatcher,您好,我的AsynTask web服务的AutoCompleteTextView中有一个问题 如果我在Textwatcher中快速地在AutoCompleteTextView中键入单词,每次它都会转到web服务获取数据并显示在下拉列表中 但是如果我打字很快,下拉列表会显示以前的数据,然后在AutocompleteTextview中再次显示当前数据,数据会被中断。如何在Android中避免这个问题 autoCompleteTextView1.addTextChangedListener(new

您好,我的AsynTask web服务的AutoCompleteTextView中有一个问题

如果我在Textwatcher中快速地在AutoCompleteTextView中键入单词,每次它都会转到web服务获取数据并显示在下拉列表中

但是如果我打字很快,下拉列表会显示以前的数据,然后在AutocompleteTextview中再次显示当前数据,数据会被中断。如何在Android中避免这个问题

 autoCompleteTextView1.addTextChangedListener(new TextWatcher() {
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    itemClicked = false;
                    if (!beforeTextChanged.equals(s.toString()) && !selectedText) { //Here we check selectedText
                        System.out.println("itemClicked" + itemClicked);
                        sText = s.toString();
                        if (sText.length() > 2) {
                            try {
                                autoCompleteTextView1.dismissDropDown();
                                autoCompleteTextView1.setAdapter(null);
                                 Async1 = new NewAsync1(getActivity(),sText);
                                 Async1 .execute();
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        } else {
                            try {
                                loadprogress_bar.setVisibility(View.INVISIBLE);
                                arrayList.clear();
                                adapter.clear();
                                adapter = new AutoCompleteAdapter(getActivity(), R.layout.customer_auto, R.id.customerNameLabel, arrayList);
                                autoCompleteTextView1.setAdapter(null);
                                autoCompleteTextView1.dismissDropDown();
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    }
                    selectedText = false; //Clear selectedText flag
                }
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    itemClicked = false;
                    beforeTextChanged = s.toString();
                }

                @Override
                public void afterTextChanged(Editable s) {
                    itemClicked = false;
                }
            });


      // NewOrderAsync Webservice
        public class NewAsync1 extends AsyncTask<String, String, String> {
            Activity mActivity;
            JSONObject jObject;
            String value;
            ProgressDialog progressDialog;
            public NewAsync1 (Activity mActivity,String value)
            {
                this.mActivity=mActivity;
                this.value= value;
            }

            @Override
            protected void onPreExecute() {
                // TODO Auto-generated method
                super.onPreExecute();

                loadprogress_bar.setVisibility(View.VISIBLE);
            }
            @Override
            protected String doInBackground(String... params) {
                try {

                    String restUrl = "";
                    System.out.println("searchurl"+Url);
                    response = client.getJSONfromURL(restUrl);
                }  catch (Exception e) {
                    e.printStackTrace();
                }

                return response;
            }

            @Override
            protected void onPostExecute(String response) {
                // TODO Auto-generated method stub
                super.onPostExecute(response);
                loadprogress_bar.setVisibility(View.INVISIBLE);
                try{
                    JSONObject obj=new JSONObject(response);
                    JSONArray arr=obj.getJSONArray("ItemResult");
                    arraylist=ApiCalls.getArraylistfromJson(arr.toString());
                    arrayList = new ArrayList<String>();
                    for (int i = 0; i < arr.length(); i++) {
                        JSONObject obj1=arr.getJSONObject(i);
                        arrayList.add(obj1.getString("Name"));
                }
                //Create adapter

                    adapter = new AutoCompleteAdapter(getActivity(), R.layout.customer_auto, R.id.customerNameLabel, arrayList);
                    autoCompleteTextView1.setThreshold(1);
                    autoCompleteTextView1.setAdapter(adapter);
            }catch (JSONException e){
                e.printStackTrace();
            }

                if (!autoCompleteTextView1.isPopupShowing()) {
                    autoCompleteTextView1.showDropDown();
                }
            }
        }
autoCompleteTextView1.addTextChangedListener(新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
itemClicked=false;
如果(!beforeTextChanged.equals(s.toString())&&!selectedText){//这里我们检查selectedText
System.out.println(“itemClicked”+itemClicked);
sText=s.toString();
if(sText.length()>2){
试一试{
autoCompleteTextView1.dismissDropDown();
autoCompleteTextView1.setAdapter(空);
Async1=新的NewAsync1(getActivity(),sText);
Async1.execute();
}捕获(例外e){
e、 printStackTrace();
}
}否则{
试一试{
加载进度条设置可见性(视图不可见);
arrayList.clear();
适配器。清除();
适配器=新的自动完成适配器(getActivity(),R.layout.customer\u auto,R.id.customerNameLabel,arrayList);
autoCompleteTextView1.setAdapter(空);
autoCompleteTextView1.dismissDropDown();
}捕获(例外e){
e、 printStackTrace();
}
}
}
selectedText=false;//清除selectedText标志
}
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
itemClicked=false;
beforeTextChanged=s.toString();
}
@凌驾
公共无效后文本已更改(可编辑){
itemClicked=false;
}
});
//NewOrderAsync Web服务
公共类NewAsync1扩展了AsyncTask{
活动能力;
JSONObject jObject;
字符串值;
进行对话进行对话;
public NewAsync1(活动mActivity,字符串值)
{
这个.mActivity=mActivity;
这个。值=值;
}
@凌驾
受保护的void onPreExecute(){
//TODO自动生成方法
super.onPreExecute();
加载进度条设置可见性(视图可见);
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
试一试{
字符串restUrl=“”;
System.out.println(“搜索Url”+Url);
response=client.getJSONfromURL(restUrl);
}捕获(例外e){
e、 printStackTrace();
}
返回响应;
}
@凌驾
受保护的void onPostExecute(字符串响应){
//TODO自动生成的方法存根
super.onPostExecute(响应);
加载进度条设置可见性(视图不可见);
试一试{
JSONObject obj=新的JSONObject(响应);
JSONArray arr=obj.getJSONArray(“ItemResult”);
arraylist=ApiCalls.getArraylistfromJson(arr.toString());
arrayList=新的arrayList();
对于(int i=0;i
不,不,不。。。你这样做是错误的。。。您不需要任何
TextWatcher
s,也不需要
AsyncTask
s,您好,我不懂这个解决方案。请澄清我。如何在onClicklistner.note
Log.d中实现此代码(标记“runQuery constraint:”+constraint)
runQuery
内部,运行代码并查看日志您的意思是
OnItemClickListener
?不,不,不。。。你这样做是错误的。。。您不需要任何
TextWatcher
s,也不需要
AsyncTask
s,您好,我不懂这个解决方案。请澄清我。如何在onClicklistner.note
Log.d中实现此代码(标记“runQuery constraint:”+constraint)
runQuery
内部,运行代码并查看日志您的意思是
OnItemClickListener