1

アクティビティ内のOrderオブジェクトに対してCRUD操作を呼び出したい。次の「Service」クラスの実装がこれを行うための良い方法であるかどうか疑問に思いました。アクティビティコードで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);
        ......

これはSQLliteDBにアクセスするための良い方法のように見えますか?Androidで構成できる「サービス」の実装について読んだので、代わりにこれを使用する必要があるのではないかと考えました。

4

2 に答える 2

1

これは多かれ少なかれ私がとるアプローチです。私のアプリケーションアーキテクチャは通常、次のようになります。

Activity <--> Service <--> DAO <--> SQLite

これはあなたが持っているものにかなり近いように見えるので、私はそれがよさそうだと思います!Context私は通常、シングルトンとして実装しませんが、アプリの存続期間全体にわたって同じ状態を維持したくないためです。代わりに、を渡して、Contextそれぞれからサービスを作成しますActivity

于 2012-07-16T14:39:56.357 に答える
1

データベースロジックを別のクラスに移動しても、すべてのデータベース操作をUIスレッドで実行しているため、理想的ではありません。Serviceまた、クラスは「サービス」と呼ばれていますが、Androidのどのクラスからも継承されていないことに注意してください。

別のアプローチの1つは、 AsyncTaskdoInBackgroundのメソッドからデータベース操作を実行し、そのメソッドから必要なデータを返すことです。次に、返されたデータを使用して、メソッドのアクティビティを更新します。onPostExecute

于 2012-07-16T14:51:11.500 に答える