我正在运行异步任务来从服务器加载结果.我正在使用SearchVIEw传递查询字词.然后使用我自己的API来获取数据.我很困惑为什么AsyncTask输出数据两次.
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); } }}
但是,当我运行搜索时,会显示两个数据实例.我无法弄清楚我做错了什么.
解决方法:
将您的查询搜索列表器更改为这样的内容
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; } });
希望它会奏效
总结以上是内存溢出为你收集整理的java – AsyncTask:onPostExecute运行两次?全部内容,希望文章能够帮你解决java – AsyncTask:onPostExecute运行两次?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)