2015-03-17 3 views
0

У меня есть автозаполнения функция, которая означает, что каждый раз, когда пользователь печатает письмо, существует сеть вызов на сервер, пользователь может ввести очень быстро и многоКак я могу сделать сетевые вызовы очень часто

I обычно используют библиотеки сторонних сторон для сетевых вызовов, но на этот раз они не сработают, мне нужно использовать AsyncTask по внешнему виду.

Я прочитал, что вы можете выполнить однократное выполнение AsyncTask. Мой вопрос: мне нужно создать объект моей AsyncTask каждый раз, когда пользователь вводит письмо? это лучший подход?

Мне известно о внедрении Filterable в моем адаптере, но мне нужно знать об этом без Filterable.

+0

Вы можете использовать Volley для этого. – jonDoe

ответ

0

Вместо того, чтобы выполнять сетевой вызов, когда пользователь вводит тип, вы можете сделать сетевой вызов, когда пользователь перестанет печатать. я реализовать его же случае, как yours.I имеют AutocompleteextView и когда тип пользователя я должен показать ему список предложений, но я называю WebService, когда пользователь прекращает typing.Below мой пример -

private final static int DELAY_BEFOR_SEARCH = 2000; 

Здесь является автозаполнение TextView Слушатель -

myAutocompleteTV.addTextChangedListener(new SearchListener()); 

и здесь Слушатель Класс -

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», и он набирает «Andr» и перестает печатать за 2000 мс, тогда мой сетевой вызов выполняется.

Смежные вопросы