手动将行添加到Cursor中

yil*_*git 17 android row cursor manual

我有一系列电话号码,我想从联系人数据库中获取相应的联系人姓名.

在电话号码数组中,我还有一些以前未保存到联系人数据库的号码.例如;

  • 3333333 - >蒂姆
  • 5555555 - >吉姆
  • 1111111 - >未知

我有包含上面显示的电话号码的数组,即phoneArr.

int size=phoneArr.size();
if(size>0){
        Cursor[] cursors=new Cursor[size];
        for(int i=0;i<size;i++){
            Uri contactUri1 = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneArr.get(i)));
            cursors[i] = getContentResolver().query(contactUri1, PEOPLE_PROJECTION, null, null, " _id asc limit 1");
        }
        Cursor phones=new MergeCursor(cursors);
Run Code Online (Sandbox Code Playgroud)

phones.getCount()在上面的场景中返回2.当电话号码没有出现在联系人列表中时,光标变空,并且当我合并它们时,它根本没有任何贡献.我想要的是有一个光标如下

光标手机 - > {Tim,Jim,1111111}

我想我可以通过手动添加行来执行此操作,如下所示:

Uri contactUri1 = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneArr.get(i)));
cursors[i] = getContentResolver().query(contactUri1, PEOPLE_PROJECTION, null, null, " _id asc limit 1");
if(cursors[i].getCount()==0)
    // add the phone number manually to the cursor
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

这是PEOPLE_PROJECTION

private static final String[] PEOPLE_PROJECTION = new String[] {
    ContactsContract.PhoneLookup._ID,
    ContactsContract.PhoneLookup.DISPLAY_NAME,
    ContactsContract.PhoneLookup.NUMBER
};
Run Code Online (Sandbox Code Playgroud)

Tim*_*nin 51

在游标中添加行的最简单方法是使用MatrixCursorMergeCursor.这两个类来自SDK,这里解决了这类问题.

基本上你做的是:

  1. 将要添加的行放入 MatrixCusror
  2. 合并你cursor和你的matrixCursor使用MergeCursor

就像是:

// Create a MatrixCursor filled with the rows you want to add.
MatrixCursor matrixCursor = new MatrixCursor(new String[] { colName1, colName2 });
matrixCursor.addRow(new Object[] { value1, value2 });

// Merge your existing cursor with the matrixCursor you created.
MergeCursor mergeCursor = new MergeCursor(new Cursor[] { matrixCursor, cursor });

// Use your the mergeCursor as you would use your cursor.
Run Code Online (Sandbox Code Playgroud)

  • 在`mergeCursor`中添加这个新行的`索引`? (4认同)