java–AsyncTask:onPostExecute运行两次?

java–AsyncTask:onPostExecute运行两次?,第1张

概述我正在运行异步任务来从服务器加载结果.我正在使用SearchView传递查询字词.然后使用我自己的API来获取数据.我很困惑为什么AsyncTask输出数据两次.mSearchView.setOnQueryTextListener(newSearchView.OnQueryTextListener(){@OverridepublicbooleanonQuer

我正在运行异步任务来从服务器加载结果.我正在使用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运行两次?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1118144.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存