如何经常拨打网络电话

时间:2015-03-17 11:28:11

标签: android android-asynctask

我有一个自动完成功能,这意味着每次用户输入一个字母时,都会对服务器进行网络调用,用户可以非常快速地输入

我通常使用第三方库进行网络调用,但这次它们不起作用,我需要使用AsyncTask。

我读过你只能执行一次AsyncTask。我的问题是,每次用户输入一个字母时,是否需要创建AsyncTask的对象?这是最好的方法吗?

我知道在我的适配器中实现了Filterable,但我需要知道这个没有Filterable。

1 个答案:

答案 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毫秒然后我的网络调用执行。