Reputation: 1715
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
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