我想在Activity中的Order对象上调用CRUD操作。我想知道以下是实现“服务”类的一个好方法吗?我不想在我的Activity代码中引用DatabaseHelper或DAO对象,因为我不认为这是可取的。 这是我的服务类
public class OrderService
{
private static OrderService instance;
private static Dao<Order, Integer> orderDAO;
static public void init(Context ctx) {
if (null == instance) {
instance = new OrderService(ctx);
}
}
public static OrderService getInstance() {
return instance;
}
private OrderService(Context ctx) {
DatabaseHelper helper = DatabaseHelper.getInstance(ctx);
helper.getWritableDatabase();
orderDAO = helper.getOrderDao();
}
public Order getOrderWithId(int orderId) {
Order myOrder = null;
try {
myOrder = orderDAO.queryForId(orderId);
} catch (SQLException e) {
e.printStackTrace();
}
return myOrder;
}
public Order neworder(Order order) {
try {
orderDAO.create(order);
} catch (SQLException e) {
e.printStackTrace();
}
return order;
}
public void deleteorder(Order order) {
try {
orderDAO.delete(order);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void updateorder(Order order) {
try {
orderDAO.update(order);
} catch (SQLException e) {
e.printStackTrace();
}
}
public List <Order> getordersForCategory(int orderId) {
List <Order> orders = null;
try {
orders = orderDAO.queryForAll();
} catch (SQLException e) {
e.printStackTrace();
}
return orders;
}
}
以下是我打算如何使用该服务
public class OrderProcessingActivity extends Activity {
int orderID;
private Order order;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myview);
order = OrderService.getInstance().getOrderWithId(orderID);
......
这看起来是访问SQLlite数据库的好方法吗? 我已经阅读了可以在Android中配置的“服务”实现,所以我想到这是我应该使用的东西吗?
答案 0 :(得分:1)
这或多或少是我采取的方法。我的应用程序架构通常如下所示:
Activity <--> Service <--> DAO <--> SQLite
这看起来非常接近你所拥有的,所以我说它看起来不错!我通常不会将其实现为单例,但是,因为我不喜欢在应用程序的整个生命周期内保持相同的Context
。相反,我传入Context
以从每个Activity
创建服务。
答案 1 :(得分:1)
尽管将数据库逻辑移动到另一个类,但是您正在UI线程中执行所有数据库操作,这并不理想。另请注意,即使您的类名为“service”,它也不会从Android中的任何Service
类继承。
另一种方法是使用AsyncTask的doInBackground
方法执行数据库操作,从该方法返回所需的数据。然后,使用返回的数据以onPostExecute
方法更新您的活动。