safaiyeh
safaiyeh

Reputation: 1715

AsyncTask: onPostExecute runs twice?

I am running async task to load results from a server. I am using SearchView to pass the query term. Then using my own API to fetch the data. I am confused on why the AsyncTask outputs the data twice.

 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);
        }
    }
}

However, when I run the search, two instances of the data is displayed. I cannot figure out what I am doing wrong.

Upvotes: 4

Views: 914

Answers (1)

King of Masses
King of Masses

Reputation: 18775

Change your Query Search Listner to something like this

 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;
        }
    });

Hope it will work

Upvotes: 2

Related Questions