- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 android 应用程序中,我有各种“实体”,例如用户定义的。我正在使用具有默认 Select
、Insert
、Update
和 Delete
功能的单个 DbOperations 类。
异步任务用作中介。它位于我的实体和 DbOperations 类之间并异步执行所有操作。这是一个例子。
ASYNC CLASS - 带有插入方法代码
private DbResponse InsertUser() {
ContentValues cntValues = GetCrmUserContentVal();
long result = _dbConn.InsertRecord(cntValues, TABLE_NAME);
DbResponse dbResponse = new DbResponse();
if(result == -1)
{
dbResponse.setStatus(false);
}
else {
dbResponse.setStatus(true);
dbResponse.setID(result);
}
return dbResponse;
}
CRM 用户实体类 - 插入方法
public void InsertintoDb()
{
new CRMUserDbOperations(this,this,DbOperationType.Insert,getCurrentContext()).execute();
}
DbResponse - 返回类型类是一个单独的类 -
private Boolean Status;
private String ErrorMessage;
private Cursor Data;
private long ID;
private DbOperationType dbOpType;
在异步任务的doBackground过程中,我有这段切换代码-
switch (_DbOpType) { // Enum type.
case Insert:
dbResponse = InsertUser();
break;
case Select:
dbResponse = SelectUser();
break;
case Update:
dbResponse = UpdateUser();
break;
default:
throw new InvalidParameterException(
_Context.getString(R.string.invalid_io));
}
如您所见,此异步任务包含我可能必须对实体执行的所有各种操作的代码。对于其他实体,我也将具有相同的结构...
现在我的问题是,我可以用更好的方式来做这件事吗?
最佳答案
是的,它可以以更好的方式完成。让我举例说明我们如何在当前应用程序中处理它。您总共只需要 4 个 AsyncTask
来进行插入、更新、删除和选择操作。让我举个例子。
你有一个接口(interface),每个实体都会实现它:
public interface DbOps {
public int delete(String where);
public void insert();
public void update();
public Cursor select();
}
注意:参数和返回类型将由您根据需要选择,但也必须适合每个实体类。我将使用 delete()
方法作为示例。
现在所有实体只需要一个DeleteTask
:
private static class DeleteTask extends AsyncTask<String, Void, Integer> {
private final DbOps mOps;
public RowDeleteTask(DbOps ops) {
mOps = ops;
}
@Override
protected Integer doInBackground(String... wheres) {
String where = wheres[0];
int rowsDeleted = mOps.delete(where);
return rowsDeleted;
}
}
像这样触发它:
new DeleteTask(mUserEntity).execute("id = 4");
new DeleteTask(mMoviesEntity).execute("name = x-man");
如果我们以 UserEntitiy
为例,显然你会得到类似的东西:
public UserEntity implements DbOps{
@Override
public int delete(String where){
return _dbConn.delete(mTable, where, null);
}
.
.
.
}
关于android - 在异步任务中正确实现 DbOperations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19649395/
在我的 android 应用程序中,我有各种“实体”,例如用户定义的。我正在使用具有默认 Select、Insert、Update 和 Delete 功能的单个 DbOperations 类。 异步任
我是一名优秀的程序员,十分优秀!