如何使用Android中的webservice纠正AutoCompleteTextView中的搜索下拉列表?
您好,我的AsynTask web服务的AutoCompleteTextView中有一个问题 如果我在Textwatcher中快速地在AutoCompleteTextView中键入单词,每次它都会转到web服务获取数据并显示在下拉列表中 但是如果我打字很快,下拉列表会显示以前的数据,然后在AutocompleteTextview中再次显示当前数据,数据会被中断。如何在Android中避免这个问题如何使用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
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.noteLog.d中实现此代码(标记“runQuery constraint:”+constraint)
在runQuery
内部,运行代码并查看日志您的意思是OnItemClickListener
?不,不,不。。。你这样做是错误的。。。您不需要任何TextWatcher
s,也不需要AsyncTask
s,您好,我不懂这个解决方案。请澄清我。如何在onClicklistner.noteLog.d中实现此代码(标记“runQuery constraint:”+constraint)
在runQuery
内部,运行代码并查看日志您的意思是OnItemClickListener
?