使用新参数重新加载AsyncTask

时间:2014-12-09 10:50:27

标签: android android-asynctask parse-platform

我有一个AsyncTask,可以在parse.com上加载我的所有数据,然后用户有一个复选框来选择他想要显示的类别。 一旦我得到这些选择(通过接口从一个单独的类),我重新加载asyncTask,但它仍然列出所有内容(如果选择数组被擦除/重新加载)。

这是获取所选类别的代码:

    @Override
public void onOkay(ArrayList<Integer> selected) {
    StringBuilder stringBuilder = new StringBuilder();
    if (selected.size() != 0) {
        for (int i = 0; i < selected.size(); i++) {
            String categories = selectedArray[selected.get(i)];
            stringBuilder = stringBuilder.append(", " + categories);
        }
        //this is to display the content of the selectedArray : 
        Toast.makeText(this, "You have selected: "
        + stringBuilder.toString(), Toast.LENGTH_SHORT).show();

        //reloading the AsyncTask class : 
        new RemoteDataTask().execute();
    }
} 

我的AsyncTask:

    private class RemoteDataTask extends AsyncTask<Void, Void, Void> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        //timer and progressdialog...
    }

    @Override
    protected Void doInBackground(Void... params) {
        list_of_articles = new ArrayList<Articles>();
        try {

            // Locate the class table named "Article" in Parse.com
            ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
                    "Article");
            query.whereWithinKilometers("Localisation_Vendeur", device_location, rayon);

            //this is the query I use : 
            query.whereContainedIn ("Category",Arrays.asList(selectedArray));
            ob = query.find();
            for (ParseObject article : ob) {
                // Locate images in article_image column
                ParseFile image = (ParseFile) article.get("label1");
                Articles map = new Articles();
                map.setArticle_label1((String) article.get("label2"));
                map.setArticle_label2((String) article.get("label3"));
                map.setArticle_category((String) article.get("Category"));
                map.setArticle_label4((String) article.get("label4"));
                map.setArticle_image(image.getUrl());
                list_of_articles.add(map);
            }
        } catch (ParseException e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        listview = (ListView) findViewById(R.id.listview);
        // Pass the results into ListViewAdapter.java
        adapter = new ListViewAdapter(MainActivity.this,
                list_of_articles);
        // Binds the Adapter to the ListView
        listview.setAdapter(adapter);
        // Close the progressdialog
        mProgressDialog.dismiss();
    }
}

我该如何做到这一点?请记住,查询工作,我已经测试了一个我手动填充的数组,它的工作原理。 感谢。

1 个答案:

答案 0 :(得分:0)

您应该通过AsyncTask.execute(Params... params)将用户想要显示的类别作为参数传递给AsyncTask。它们将作为方法参数以AsyncTask.doInBackground方法提供。在doInBackgorund方法中使用它们来适当地设置您的查询。

private class RemoteDataTask extends AsyncTask<List<String>, Void, Void> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        //timer and progressdialog...
    }

    @Override
    protected Void doInBackground(List<String>... params) {
        list_of_articles = new ArrayList<Articles>();
        try {

            // Locate the class table named "Article" in Parse.com
            ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
                    "Article");
            query.whereWithinKilometers("Localisation_Vendeur", device_location, rayon);

            //this is the query I use : 
            query.whereContainedIn ("Category", params[0]);
            ob = query.find();
            for (ParseObject article : ob) {
                // Locate images in article_image column
                ParseFile image = (ParseFile) article.get("label1");
                Articles map = new Articles();
                map.setArticle_label1((String) article.get("label2"));
                map.setArticle_label2((String) article.get("label3"));
                map.setArticle_category((String) article.get("Category"));
                map.setArticle_label4((String) article.get("label4"));
                map.setArticle_image(image.getUrl());
                list_of_articles.add(map);
            }
        } catch (ParseException e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        listview = (ListView) findViewById(R.id.listview);
        // Pass the results into ListViewAdapter.java
        adapter = new ListViewAdapter(MainActivity.this,
                list_of_articles);
        // Binds the Adapter to the ListView
        listview.setAdapter(adapter);
        // Close the progressdialog
        mProgressDialog.dismiss();
    }
}

然后在代码中通过调用new RemoteDataTask().execute(Arrays.asList(selectedArray))运行AsyncTask。确保在每次调用AsyncTask之前正确更新selectedArray