0

選択した連絡先を取得したいのですが、実行時例外が発生するため何も返されません。

String[] Phoneprojection = {Phone.NUMBER,Phone.TYPE};
                String[] projection ={Contacts.DISPLAY_NAME};
                String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1";
                Cursor cursor = null;
                Cursor phone = null;
                try
                {
                    cursor =  managedQuery(intent.getData(), projection, selection, null, null);
                    while (cursor.moveToNext()) 
                    {           
                       String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
                       // String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));

                        phone = managedQuery(Phone.CONTENT_URI,Phoneprojection,Data.CONTACT_ID + "=?",
                                new String[]{String.valueOf(contactId)},
                                null);
                        if(phone.moveToFirst()) {
                            final int contactNumberColumnIndex = phone.getColumnIndex(Phone.NUMBER);
                            final int contactTypeColumnIndex = phone.getColumnIndex(Phone.TYPE);

                            while(!phone.isAfterLast()) {
                                final String number = phone.getString(contactNumberColumnIndex);
                                //final int type = phone.getInt(contactTypeColumnIndex);
                                //final int typeLabelResource = Phone.getTypeLabelResource(type);
                            //  if(typeLabelResource==2)
                                phonenumber.setText(number);
                                Log.e("TAG1",phonenumber.toString());
                                phone.moveToNext();
                            }

                        }                       
                   }  
                }
                catch (Exception npe)
                {
                    Log.e("TAG2", "Error trying to get Contacts."+npe.getMessage());
                }

生成されるログは次のとおりです。 Error trying to get Contacts.Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.

誰でもこれを解決する方法を説明できますか。

4

2 に答える 2

0

すぐに外側のカーソルにアクセスしますが、実際にデータが返されたかどうかさえわかりません。

while (cursor.moveToNext()) {           
  String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
  // String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));

Whileループをdo-whileループに変更して呼び出します

if (!cursor.moveToFirst())
  return;

これにより、クエリが実際に結果を取得したことが保証されます。

于 2013-09-21T23:27:26.357 に答える
0

あなたのコードは間違っています。プロジェクションに Contacts._ID が含まれていません。

String[] projection ={Contacts.DISPLAY_NAME}; // add Contacts._ID if you wanna query it
String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
于 2013-09-22T02:22:26.207 に答える