【发布时间】:2019-02-01 07:19:41
【问题描述】:
我想使用AsyncTask 查询数据库。现在我可以选择为每种类型的查询创建不同的 AsyncTasks。我倾向于另一种选择是为每种类型的查询创建一个 AsyncTask。
如果我将参数作为对象传递,然后将它们转换回来,这是一种不好的做法吗?我会遇到一些麻烦吗?我应该在构造函数中传递所有内容吗?
public void insert (Item item){
new queryAsyncTask(mItemDao).execute(INSERT_QUERY, item);
}
public void delete (int uid){
new queryAsyncTask(mItemDao).execute(DELETE_QUERY, uid);
}
private static class queryAsyncTask extends AsyncTask<Object, Void, Void>{
private ItemDao mAsyncDao;
queryAsyncTask(ItemDao dao){
mAsyncDao = dao;
}
@Override
protected Void doInBackground(Object... objects) {
switch ((int) objects[0]){
case DELETE_QUERY:
mAsyncDao.deleteItem((int)objects[1]);
break;
case INSERT_QUERY:
mAsyncDao.insert((Item)objects[1]);
break;
}
return null;
}
}
【问题讨论】:
-
您可以直接使用 Integer 代替对象,当它传递给 switch case 时无需强制转换它
-
公共类 queryAsyncTask 扩展 AsyncTask
{ private ItemDao mAsyncDao; queryAsyncTask(ItemDao dao) { mAsyncDao = dao; } @Override protected Void doInBackground(Integer... integers) { switch (integers[0]) { case DELETE_QUERY: mAsyncDao.deleteItem((int) objects[1]);休息;案例 INSERT_QUERY: mAsyncDao.insert((Item) objects[1]);休息; } 返回空值; } } -
但是对于插入操作,我需要传递Item对象,仔细看。
-
它没有相关性,但对于数据库操作,我认为最好的方法是
String。
标签: android object android-asynctask android-room