Как передать два параметра в AsyncTask? - PullRequest
2 голосов
/ 04 мая 2020

Я использую структуру MVVM, и мой запрос в Dao выглядит следующим образом:

@Query("SELECT * FROM Sorted WHERE date LIKE :date AND categoryChart = :category")
LiveData<List<Sorted>> getSortedDiagramData(String date, String category);

В репозитории мне нужно выполнить этот метод в AsyncTask, но я не понимаю, как это сделать.

Что я пробовал:

 public LiveData<List<Sorted>> getSortedDiagramData(String date, String category){
    String[] array = new String[2];
    array[0] = date;
    array[1] = category;
    return new GetSortedDiagramDataAsyncTask(sortedDao).execute(array);
}

А потом:

 private static class GetSortedDiagramDataAsyncTask extends AsyncTask<String[], Void, LiveData<List<Sorted>>> {
    private SortedDao sortedDao;
    private GetSortedDiagramDataAsyncTask(SortedDao sortedDao){
        this.sortedDao = sortedDao;
    }
    @Override
    protected LiveData<List<Sorted>> doInBackground(String[] ... strings) {
        String date1 = String.valueOf(strings[0]);
        String category1 = String.valueOf(strings[1]);
        LiveData<List<Sorted>> list = sortedDao.getSortedDiagramData(date1, category1);
        return list;
    }
}

Но когда я передаю "array" для execute (), возникает ошибка "Несовместимые типы".

Не могли бы вы подсказать, как я могу решить эту проблему? Спасибо за любую помощь.

Ответы [ 2 ]

3 голосов
/ 04 мая 2020

Вы можете передать его в конструкторе:

private String date, category;
private SortedDao sortedDao;
public GetSortedDiagramDataAsyncTask(SortedDao sortedDao, String date, String category) {
    this.date = date;
    this.category = category;
    this.sortedDao = sortedDao;
}

@Override
protected LiveData<List<Sorted>> doInBackground(String[]... strings) {
    LiveData<List<Sorted>> list = sortedDao.getSortedDiagramData(date, category);
    return list;
}

Назовите его как:

new GetSortedDiagramDataAsyncTask(sortedDao, "date", "category").execute();
1 голос
/ 04 мая 2020

Другой способ будет использовать это:

GetSortedDiagramDataAsyncTask(sortedDao).execute(date,category);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...