Android Room Persistence中的插入,更新,删除和查询是否会失败吗?

时间:2018-06-20 02:43:43

标签: java android

我只是对此感到好奇。我刚刚使用过Room,想了解更多信息。查询是否会失败?我正在使用AsyncTask进行插入或查询时..而且我没有任何回调..我只是执行它,然后将其保存..每当我查询时,我都会这样做:

try {
    List<Object> objectList = new GetObjectTask.execute().get();
} catch (Exception e) {
    e.printStack();
}

这是正确的方法吗?

这是GetObjectTask类

public class GetObjectTask extends AsyncTask<Void, Void, List<Object>> {

    public GetObjectTask() {
    }

    @Override
    protected List<Object> doInBackground(Void... voids) {
        return AppDatabaseHelper.getInstance().getObjectDao().getAllObject();
    }
}

1 个答案:

答案 0 :(得分:1)

  

这是正确的方法吗?

这取决于您的设计。

  • 要实现此目标,您需要实施可感知生命周期的数据更新自己。反过来,这将导致添加样板代码来管理配置更改。另外,您需要添加额外的代码来解析列表并相应地更新视图
  • 您的活动将充满用于访问DB中数据的代码。理想情况下,您应该避免这种情况,并使Activity仅负责处理视图数据。活动不应该担心数据源。

正确的方法是:

  • 实现一个ViewModel体系结构组件,并让ViewModel处理数据库操作。

  • 由于Room可以返回create table manage_emplyee ( f_name varchar(20), l_name varchar(20) ); // Specification create or replace package fn2 as procedure manage_emplyee(v_fname in VARCHAR2, v_lname in VARCHAR2); procedure manage_emplyee_delete(v_fname in VARCHAR2); end; / create or replace package body fn2 as --Procedure Implementation procedure manage_emplyee(v_fname in VARCHAR2, v_lname in VARCHAR2) is begin insert into manage_emplyee VALUES (v_lname, v_lname); end manage_emplyee; // body procedure manage_emplyee_delete (v_fname in VARCHAR2) is begin delete manage_emplyee where v_fname = v_fname; end manage_emplyee_delete; end fn2; / ,因此您可以轻松观察更改并相应地更新视图。为此签出observable queries