У меня есть AsyncTask, который загружает все мои данные на parse.com, тогда у пользователя есть флажок, чтобы выбрать категории, которые он хочет отобразить. Как только я получаю эти варианты (из отдельного класса через интерфейс), я перезагружаю asyncTask, но он все еще перечисляет все (например, если массив вариантов удаляется/перезагружается).Обновить 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();
}
}
Как я могу сделать эту работу? Имейте в виду, что запрос работает, я тестировал массив, который я заполнил вручную, и он работает. Спасибо.
'query.whereContainedIn (" Category ", Arrays.asList (selectedArray));' должен быть 'query.whereContainedIn (" Category ", stringBuilder);'? Я просто думаю. – LeXeR
@LeXeR 'whereContainedIn' запрашивает массив значений. Я использовал stringbuilder для отображения содержимого массива (только для тестирования, он будет удален) – RidRoid
проверить содержимое 'Arrays.asList (selectedArray)'. я думаю, что это проблема. – LeXeR