gpt4 book ai didi

android - 在异步任务中正确实现 DbOperations

转载 作者:行者123 更新时间:2023-11-29 17:55:41 24 4
gpt4 key购买 nike

在我的 android 应用程序中,我有各种“实体”,例如用户定义的。我正在使用具有默认 SelectInsertUpdateDelete 功能的单个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com