【发布时间】: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);
}
【问题讨论】:
标签: android multithreading android-studio asynchronous android-asynctask