我正在编写一个严重依赖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);
答案 0 :(得分:2)
一般概念:
当你面对这个问题时,你只需要思考:
1.如果您有大量数据,唯一的解决方案是延迟加载,这意味着只在您需要时才加载数据。由于I / O操作,它会导致数据库命中几次而软件速度会变慢是"昂贵"
2.如果你有小数据,你可以考虑这两个选项: - 您的小数据有时会增长吗?如果是,那么你必须帮助你应用程序可扩展..所以延迟加载是正确的选择。
3.如果数据很小且不变,您可以加载一次并启动应用程序并在激活之间传递它。您不需要超过1个查询,您的应用程序将更快< / p>
这基本上是所有选项:)
希望有所帮助
答案 1 :(得分:1)
目前,我将表名和记录ID传递给新活动 通过打开它的Intent,在新活动中我重新提取所有内容 来自数据库的数据。
我建议您为id
数据模型添加自定义唯一Object
标识符
以及定义Object
所属的数据库的变量。通过这样做,您可以避免查询。
然而,我刚想到也许会更好 (即更有效)传递包含所有记录的对象 数据,具有更新或删除记录的方法。
尝试在Object
之间传递自定义Activities
时,您将遇到的一个问题是,您需要让Object
实现Parcelable
接口。这是必需的,因此Android知道如何编组/解组您的Object
。
答案 2 :(得分:1)
我会推荐第一个并查询第二个活动的onCreate
中的值。这样做的原因是每次创建活动时都会重新查询记录,然后可以在后台更改记录的任何情况下获取最新信息。因此,如果用户从最近启动活动,它可以绕过活动并且具有陈旧数据。我的2美分。