Android 异步任务中DbOperations的正确实现
在我的android应用程序中,我有各种实体,比如用户定义的。我使用的是一个DbOperations类,它具有默认的选择、插入、更新和删除功能 异步任务用作中介。它位于实体和DbOperations类之间,异步执行所有操作。这里有一个例子 异步类-带有插入方法代码 CRM用户实体类-插入方法 DbResponse-返回类型类是一个单独的类-Android 异步任务中DbOperations的正确实现,android,android-asynctask,Android,Android Asynctask,在我的android应用程序中,我有各种实体,比如用户定义的。我使用的是一个DbOperations类,它具有默认的选择、插入、更新和删除功能 异步任务用作中介。它位于实体和DbOperations类之间,异步执行所有操作。这里有一个例子 异步类-带有插入方法代码 CRM用户实体类-插入方法 DbResponse-返回类型类是一个单独的类- private Boolean Status; private String ErrorMessage; private Cursor Data; priv
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));
}
正如您所注意到的,这个异步任务包含我可能必须在实体上执行的所有各种操作的代码。对于其他实体,我也会有相同的结构
现在我的问题是,我能以更好的方式来做吗?这不是植入式广告或其他什么,它是开源的,我已经在异步数据库上工作了一段时间,最近为它创建了一个库 它位于Github上的 它涵盖了异步数据库使用的一个更一般的需求,如果您愿意,您可以做一件异步的事情,也可以做整件事情 在接下来的几个月里,它将实现一个实体框架,因为我现在正在开发一个Ubuntu touch版本 任何需要的信息都可以问 对于少量的对象,实体是很好的,但是当您想要报告它们时,它们会变得非常慢,这在microsofts实体框架中甚至很明显。在大多数情况下,以异步方式使用直接SQL通常会大大提高性能,因为它不需要中间对象 注意,在Android1.6和3.0之间,AsyncTask类有时会并行执行,这会在任何数据库中造成一些问题。因此,在使用这些版本时,您可能会发现一些差异,这是在我的DbHelper中实现的:
是的,可以用更好的方法来做。让我举一个例子,说明我们在当前应用程序中如何处理它。插入、更新、删除和选择操作总共需要4个异步任务。让我给你举个例子 您有一个接口,每个实体都将实现它:
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;
}
}
很明显,如果我们以UserEntitiy为例,你会得到类似的结果:
public UserEntity implements DbOps{
@Override
public int delete(String where){
return _dbConn.delete(mTable, where, null);
}
.
.
.
}
这可能对你将来有用。我刚刚进入实体now@FabianCook,该链接信息丰富,谢谢!它的基础部分已经完成,文档解释了如何使用它等等。它的实体部分正在它上面构建。@FabianCook,你能在GitHub上托管它吗?已经,等等,将为你提供当前问题的链接,@M-WaJeEh建议的结构更合适。但是谢谢。我将继续关注你的库。实际上,你应该在所有四个库中使用一个,在大多数版本的android中,它一次只运行一个,不管怎样,为什么要创建不必要的对象呢?
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");
public UserEntity implements DbOps{
@Override
public int delete(String where){
return _dbConn.delete(mTable, where, null);
}
.
.
.
}