java - 异步任务 : onPostExecute runs twice?

标签 java android android-asynctask

我正在运行异步任务以从服务器加载结果。我正在使用 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 - 异步任务 : onPostExecute runs twice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31871055/

相关文章:

c# - 延续:我可以在 F# 异步工作流或 C# 异步函数中序列化延续吗?

java - Hibernate 实体映射 : Retrieve VARCHAR as boolean

java - 如何为一个类(class)个性化 equals 并测试一组中的相等值?

android - 启动通用 Activity 并等待 AsyncTask 完成

java - Android - SQLite 向数据库添加更多表时出现问题

android - 资源目录导航无效

安卓媒体播放器 : Start called in state 4 error(-38, 0)

java - 您如何在不同的暂存环境中维护 java webapps?

java - 有没有办法从 Drive SDK 中的 InputStream 将文件上传到 Google Drive?

Android 谷歌地图 v2 内存消耗大