0
Cursor searchCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
        new String[] {"_id",Phone.DISPLAY_NAME}, Phone.DISPLAY_NAME + " like ?", 
        new String[]{ "%" + cc.get("contactName").toString() + "%"}, null);

startManagingCursor(searchCursor);
while(searchCursor.isAfterLast() == false) {
    final String name = searchCursor.getString(searchCursor.getColumnIndex(Phone.DISPLAY_NAME));
    final String number = searchCursor.getString(searchCursor.getColumnIndex(Phone.NUMBER));
    str =new String[]{name,number};
    ada = new SimpleCursorAdapter(this, R.layout.view_contacts_listview_layout, searchCursor, str, new int[] { R.id.contactName, R.id.contactPhoneNo });
}

lvSearch.setAdapter(ada);

カーソルクエリが正常に実行されると、単純なカーソルアダプタでのみ問題が発生します。

4

1 に答える 1

1
str =new String[]{name,number};

する必要があります

str = new String[]{Phone.DISPLAY_NAME, Phone.NUMBER};

SimpleCursorAdapterに列名を渡すことになっています。代わりに、使用する列名として列の値(例:555-555-5555、 "john")を渡します。

さらに、コードは次のように簡略化できます。

Cursor searchCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                new String[] {"_id",Phone.DISPLAY_NAME}, Phone.DISPLAY_NAME + " like ?", 
                 new String[]{ "%" + cc.get("contactName").toString() + "%"}, null);

startManagingCursor(searchCursor);
str = new String[]{Phone.DISPLAY_NAME, Phone.NUMBER};
ada = new SimpleCursorAdapter(this,
                                R.layout.view_contacts_listview_layout, searchCursor,
                                str, new int[] {
                                        R.id.contactName, R.id.contactPhoneNo });

SimpleCursorAdapterに送信する前にカーソルにアクセスする理由はありません。それはあなたがあなたのために必要とするすべてを自動的に管理します。

SimpleCursorAdapterのNUMBERにアクセスしようとしているにもかかわらず、クエリで連絡先_IDとDISPLAY_NAMEのみを選択していることにも気づきました。電話番号を含めるように予測を変更する必要があります。例:

String[] projection = new String[] { BaseColumns._ID, Phone.DISPLAY_NAME, Phone.NUMBER };

Cursor searchCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                    projection , Phone.DISPLAY_NAME + " like ?", 
                     new String[]{ "%" + cc.get("contactName").toString() + "%"}, null);
于 2012-04-30T14:15:39.817 に答える