我有一些表格:
在android中:
Contacts (ContactsContract (android database)): ContactsId, DisplayName, Thumbnail Uri
Phone (android database): ContactsId, Number, Number_Type
在我的应用程序中:
MyMessageTable (my app database): Number, myMessageId, etc
现在我需要一行如下:
Number, Number_Type, DisplayName , Thumbnail Uri, myMessageId , etc
我希望在游戏加载器中使用行来显示在UI中。 但问题是我无法使用安卓表加入我的表。
解决方案:
分别查询每个表并在上层处理它(问题:无法将多个游标发送到游标加载器并在UI中使用它)
加入Android表和电话表后,用MyMessageTable加入结果(问题:在两个不同的数据库中加入两个不同的表?)
在RAM中缓存联系人和电话表并在上层处理它并仅将MyMessageTable
光标发送到UI。 (问题:Ram的使用,需要时间在ram中缓存android表)
将Android表格复制到我的应用中的新表格并加入SQLiteQueryBuilder
并使用ContentObserver
更新我的表格。(问题:需要时间复制而且ContentObserver
不起作用申请结束时。)
5.使用CursorJoiner
。但我无法将多个cursor
推送到UI
。
你有更好的主意吗?
答案 0 :(得分:0)
像这样创建一些游标包装器(它是一个穷人的实现,但显示了如何做到):
class CW extends CursorWrapper {
public CW(Cursor cursor) {
super(cursor);
}
// TODO you will probably need to override these methods:
// public int getColumnCount()
// public int getColumnIndex(String columnName)
// public int getColumnIndexOrThrow(String columnName)
// public String getColumnName(int columnIndex)
// public String[] getColumnNames()
@Override
public String getString(int columnIndex) {
if (columnIndex < super.getColumnCount()) {
return super.getString(columnIndex);
}
return "extra column for row #" + getPosition();
}
}
并测试它:
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] proj = {
ContactsContract.Contacts.DISPLAY_NAME
};
ContentResolver cr = getContentResolver();
Cursor c0 = cr.query(uri, proj, null, null, null);
while (c0.moveToNext()) {
Log.d(TAG, "onCreate [" + c0.getString(0) + "]");
}
c0.close();
Cursor c1 = new CW(cr.query(uri, proj, null, null, null));
while (c1.moveToNext()) {
Log.d(TAG, "onCreate [" + c1.getString(0) + "] [" + c1.getString(1) + "]");
}
c1.close();