【发布时间】:2020-05-23 11:19:33
【问题描述】:
我有这个编译器警告:在上述代码中使用未经检查或不安全的操作
new InsertAllTask(essenceDao).execute(essenceList)
但我不知道为什么,我尝试使用 -Xlint 参数运行,没有更多信息。
代码有效,但警告仍然存在。
希望你能帮忙
整个任务:
public static class DeleteAllTask extends AsyncTask<Void, Void, Void> {
private final EssenceDao essenceDao;
private final List<Essence> essenceList;
DeleteAllTask(EssenceDao essenceDao, List<Essence> list) {
this.essenceDao = essenceDao;
this.essenceList = list;
}
@Override
protected Void doInBackground(Void... voids) {
essenceDao.deleteAllEssence();
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (essenceList != null) {
// Insert new list
new InsertAllTask(essenceDao).execute(essenceList);
}
}
}
插入任务:
public static class InsertAllTask extends AsyncTask<List<Essence>, Void, Void> {
private final EssenceDao essenceDao;
InsertAllTask(EssenceDao essenceDao) {
this.essenceDao = essenceDao;
}
@Override
@SafeVarargs
protected final Void doInBackground(List<Essence>... essences) {
essenceDao.insertEssence(essences[0]);
return null;
}
}
【问题讨论】:
-
类
InsertAllTask是通用的吗? -
也许它是题外话,但你能澄清一下 - 使用 AsyncTask 是你的强项(你必须保持遗留,你没有时间重构和类似的东西)或者你对其他方法持开放态度切换执行到后台,但只是不知道它们是什么?
-
您已将
doInBackground标记为@SafeVarargs,但您正在调用继承的execute方法,该方法显然没有注释。 -
我不明白你的回答。我不建议删除现有的注释。我说继承的
execute方法没有。由于该方法不在您的职责范围内并且不能被覆盖,因此您无能为力。由于this page 说,整个类已弃用,Android 开发人员可能更不可能修复此问题。 -
会有一种可能的解决方法。您可以实现
AsyncTask<Essence, Void, Void>并使用所有参数,而不是实现AsyncTask<List<Essence>, Void, Void>并仅使用 varargs 方法的第一个参数,例如doInBackground(Essence... essences) { essenceDao.insertEssence(Arrays.asList(essences)); return null; }。但是,调用者还需要传递一个数组,即new InsertAllTask(essenceDao) .execute(essenceList.toArray(new Essence[0]));
标签: java android android-room