2015-08-07 8 views
4

Я запускаю задачу async для загрузки результатов с сервера. Я использую SearchView для передачи запроса. Затем, используя мой собственный API для извлечения данных. Я смущен тем, почему AsyncTask выводит данные дважды.AsyncTask: onPostExecute запускается дважды?

mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(final String query) { 
      linearLayout.removeAllViews(); 
      new Search(query, linearLayout).execute(); 

      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      linearLayout.removeAllViews(); 
      return false; 
     } 
    }); 




private class Search extends AsyncTask<Void, Void, ArrayList<Business>> { 

    String query; 
    LinearLayout linearLayout; 

    public Search(String query, LinearLayout linearLayout) { 
     this.query = query; 
     this.linearLayout = linearLayout; 
    } 

    @Override 
    protected ArrayList<Business> doInBackground(Void... params) { 
     YelpApi yelpApi = new YelpApi(getString(R.string.yelp_consumer_key), getString(R.string.yelp_consumer_secret), getString(R.string.yelp_token), getString(R.string.yelp_token_secret)); 
     HashMap<String, String> parameters = new HashMap<>(); 
     parameters.put("term", query); 
     parameters.put("sort", "2"); 
     parameters.put("limit", "5"); 
     return yelpApi.searchLocation("North Hills, CA", parameters); 
    } 

    @Override 
    protected void onPostExecute(ArrayList<Business> businesses) { 
     for (int i = 0; i < businesses.size(); i++) { 
      TextView mTextView = new TextView(getApplicationContext()); 
      mTextView.setText(businesses.get(i).getName()); 
      mTextView.setTextColor(Color.BLACK); 
      linearLayout.addView(mTextView); 
     } 
    } 
} 

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

+0

То, что размер 'businesses'? –

+1

попытайтесь вернуть true внутри метода onQueryTextSubmit(), поскольку вы сами его обрабатываете –

+0

@satyenudeshi между 1 - 40 – safaiyeh

ответ

2

Изменить поисковый запрос у слушателя на что-то вроде этого

mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(final String query) { 
      linearLayout.removeAllViews(); 
      new Search(query, linearLayout).execute(); 

      return true; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      linearLayout.removeAllViews(); 
      return false; 
     } 
    }); 

Надежда будет работать

+0

Получил тот же результат. – safaiyeh

+0

Число отображаемых данных в вашем пользовательском интерфейсе равно размеру arraylist предприятий при выполнении записи? –

+0

Извините. список массивов выводится дважды. – safaiyeh

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