如何在 AsyncTask 中传递两个参数?

Posted

技术标签:

【中文标题】如何在 AsyncTask 中传递两个参数?【英文标题】:How to pass two parameters in AsyncTask? 【发布时间】:2020-08-18 23:25:04 【问题描述】:

我正在使用 MVVM 结构,我在 Dao 中的查询看起来像:

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

在 Repository 中,我需要在 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;
    

但是当我将“数组”传递给 execute() 时,会出现错误“不兼容的类型”。

您能建议我如何解决这个问题吗?感谢您的帮助。

【问题讨论】:

在构造函数中传递参数 你能举个例子吗? 你已经有一个例子了。它在你的问题中。 GetSortedDiagramDataAsyncTask 有一个构造函数:GetSortedDiagramDataAsyncTask(SortedDao sortedDao)。您可以向其中添加其他参数并将它们存储在字段中,就像您存储 sortedDao 一样。但请注意,AsyncTask 已被弃用。 【参考方案1】:

你可以在构造函数中传递它:

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();

【讨论】:

【参考方案2】:

另一种方法是使用这个:

GetSortedDiagramDataAsyncTask(sortedDao).execute(date,category);

【讨论】:

以上是关于如何在 AsyncTask 中传递两个参数?的主要内容,如果未能解决你的问题,请参考以下文章

Android:如何将参数传递给AsyncTask的onPreExecute()?

如何在AsyncTask中传递字符串?

如何在修改之前在 AsyncTask 中使用变量?

自定义对话框片段内的进度条 - 如何从 AsyncTask 传递进度?

Android:如何将参数传递给 AsyncTask 的 onPreExecute()?

在 Android 中,如何从 AsyncTask 更改 TextView? [复制]