将数据库记录传递给新活动的最佳方法

时间:2014-05-28 22:10:08

标签: android sqlite optimization

我正在编写一个严重依赖sqlite数据库的Android应用程序。我不清楚将记录数据从一个活动传递到下一个活动的最佳方式(在内存和资源方面最有效)。例如,您可以在其中查看客户记录,然后可以单击操作菜单项来编辑记录。目前,我通过打开它的Intent将表名和记录ID传递给新活动,并在新活动中重新提取数据库中的所有数据。然而,我刚想到,传递包含所有记录数据的对象可能会更好(即更有效),该数据具有更新或删除记录的方法。每个表最多只有十几个列,因此对象非常小,尽管在某些情况下为了适应表之间的一对一或一对多关系,{}传递的数据对象{1}}将包含一个或多个数据对象作为字段。我正在寻找利弊,如果可能的话,我会寻求最佳解决方案的明确裁决。

:此

(查看记录活动)

Intent

(编辑记录活动)

Intent intent = new Intent(this, EditRecordActivity.class);
intent.putExtra(TABLE_NAME, tableName);
intent.putExtra(RECORD_ID, recordId);
startActivity(intent);

或者

(客户类)

String tableName = getIntent().getStringExtra(ViewRecordActivity.TABLE_NAME);
String recordId = getIntent().getStringExtra(ViewRecordActivity.RECORD_ID);
Cursor c = db.query(tableName, DB_COLUMNS, "_ID = ?",new String[]{ recordId }, null,null, null);
// populate EditText fields with data from Cursor

(查看记录活动)

public class Customer extends Record{
  String id;
  String firstName;
  String lastName;
  String phone;

  public Customer(int recordId, String table){
    Cursor c = db.query(table, DB_COLUMNS, "_ID = ?",new String[]{ recordId }, null, null, null);
    c.moveToFirst();
    id = c.getString[0];
    firstName = c.getString[1];
    lasstName = c.getString[2];
    phone = c.getString[3];
    c.close();
  }
}

(编辑记录活动)

Intent intent = new Intent(this, EditRecordActivity.class);
intent.putExtra(RECORD, customer);
startActivity(intent);

3 个答案:

答案 0 :(得分:2)

一般概念:

当你面对这个问题时,你只需要思考:

1.如果您有大量数据,唯一的解决方案是延迟加载,这意味着只在您需要时才加载数据。由于I / O操作,它会导致数据库命中几次而软件速度会变慢是"昂贵"

2.如果你有小数据,你可以考虑这两个选项: - 您的小数据有时会增长吗?如果是,那么你必须帮助你应用程序可扩展..所以延迟加载是正确的选择。

3.如果数据很小且不变,您可以加载一次并启动应用程序并在激活之间传递它。您不需要超过1个查询,您的应用程序将更快< / p>

这基本上是所有选项:)

希望有所帮助

答案 1 :(得分:1)

  

目前,我将表名和记录ID传递给新活动   通过打开它的Intent,在新活动中我重新提取所有内容   来自数据库的数据。

我建议您为id数据模型添加自定义唯一Object标识符 以及定义Object所属的数据库的变量。通过这样做,您可以避免查询。

  

然而,我刚想到也许会更好   (即更有效)传递包含所有记录的对象   数据,具有更新或删除记录的方法。

尝试在Object之间传递自定义Activities时,您将遇到的一个问题是,您需要让Object实现Parcelable接口。这是必需的,因此Android知道如何编组/解组您的Object

我建议你做的一件事是研究DAO(即GreenDAOORMLite库。它们简化了与数据库的交互。

答案 2 :(得分:1)

我会推荐第一个并查询第二个活动的onCreate中的值。这样做的原因是每次创建活动时都会重新查询记录,然后可以在后台更改记录的任何情况下获取最新信息。因此,如果用户从最近启动活动,它可以绕过活动并且具有陈旧数据。我的2美分。