不明白为啥 AsyncTask 给了我一个不兼容的类型
Posted
技术标签:
【中文标题】不明白为啥 AsyncTask 给了我一个不兼容的类型【英文标题】:Not understanding why AsyncTask is giving me an incompatible type不明白为什么 AsyncTask 给了我一个不兼容的类型 【发布时间】:2019-04-15 13:53:45 【问题描述】:我试图在后台访问我的数据库,这样我就不会锁定线程并得到一个错误,所以我读到我应该使用 AsyncTask。从我读到的内容来看,它需要使用 3 种数据类型。它接受的数据类型,它处理的数据类型,以及返回的数据类型。所以在这里我制作了一个步数跟踪器并想访问我的数据库以通过 id 获取一些东西,所以我调用我的存储库并传入我正在使用的数据库和我想要查找的 id
cStep = stepRepository.getStepById(stepDatabase,0);
这是我的存储库类和其中的 AsyncTask
> public class StepRepository implements IStepDataSource
private IStepDataSource mLocalDataSource;
private static StepRepository mInstance;
public StepRepository(IStepDataSource mLocalDataSource)
this.mLocalDataSource = mLocalDataSource;
public static StepRepository getInstance(IStepDataSource mLocalDataSource)
if(mInstance == null)
mInstance = new StepRepository(mLocalDataSource);
return mInstance;
@Override
public Flowable<List<Step>> getAllSteps()
return mLocalDataSource.getAllSteps();
@Override
public Step getStepById(StepDatabase db, int userId)
return new getAsyncTask(db).execute(userId);
private static class getAsyncTask extends AsyncTask<Integer, Void, Step>
getAsyncTask(StepDatabase db)
this.db = db;
@Override
protected Step doInBackground(Integer... params)
StepDao dao = db.stepDao();
return dao.getStepById(params[0]);
@Override
protected void onPostExecute(Step step)
@Override
public void insertStep(Step... steps)
mLocalDataSource.insertStep(steps);
@Override
public void updateStep(Step... steps)
mLocalDataSource.updateStep(steps);
@Override
public void deleteStep(Step step)
mLocalDataSource.deleteStep(step);
我不明白为什么 getUserByid 给了我不兼容的类型,因为 AsyncTask 接受并整数并返回我想要的步骤?
顺便说一句,如果它有任何帮助,这是我的存储库实现的 IStepDataSource
public interface IStepDataSource
Flowable<List<Step>> getAllSteps();
Step getStepById(StepDatabase db, int userId);
void insertStep(Step... steps);
void updateStep(Step... steps);
void deleteStep(Step step);
【问题讨论】:
你误解了它的用法,请看***.com/questions/9671546/asynctask-android-example 【参考方案1】:AsyncTask 的 execute() 方法返回 void,您正试图从声明为返回 Step 的方法返回 void。最好从 getStepById() 方法中取出 AsyncTask,而使用调用 getStepById() 的 AsyncTask。我认为您假设 execute() 阻塞直到任务完成,这是不正确的。如果是这种情况,那么使用 AsyncTask 就没有意义了。 execute() 立即返回,onPostExecute(Step step) 是结果应该被处理/显示/什么的地方。
【讨论】:
以上是关于不明白为啥 AsyncTask 给了我一个不兼容的类型的主要内容,如果未能解决你的问题,请参考以下文章