我有一个自动完成功能,这意味着每次用户输入一个字母时,都会对服务器进行网络调用,用户可以非常快速地输入
我通常使用第三方库进行网络调用,但这次它们不起作用,我需要使用AsyncTask。
我读过你只能执行一次AsyncTask。我的问题是,每次用户输入一个字母时,是否需要创建AsyncTask的对象?这是最好的方法吗?
我知道在我的适配器中实现了Filterable,但我需要知道这个没有Filterable。
答案 0 :(得分:0)
当用户输入时,您可以在用户停止输入时进行网络呼叫,而不是进行网络呼叫。 我实现它与你的同一个案例。我有一个AutocompleteextView,当用户输入我必须向他显示建议列表,但是当用户停止输入时我调用webservice.Below是我的例子 -
private final static int DELAY_BEFOR_SEARCH = 2000;
这是Autocomplete TextView Listener -
myAutocompleteTV.addTextChangedListener(new SearchListener ());
这里是Listener Class -
public class SearchListener implements TextWatcher{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
try{
mMessageHandler.removeCallbacks(mSearchRunnable);
if(s.length()>0){
if(Utility.isNetworkAvailable(mContext)){
mMessageHandler.postDelayed(mSearchRunnable, DELAY_BEFOR_SEARCH);
}
else{
Toast.makeText(mContext, getResources().getString(R.string.no_network_message),Toast.LENGTH_SHORT).show();
}
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
这里是Runnable -
Runnable mSearchRunnable = new Runnable() {
public void run() {
//TODO call your webservice here
}
}
例如,如果用户类型想要搜索' Android'他打字和安德烈' ans停止键入2000毫秒然后我的网络调用执行。