1

悲しいかな、私の電話帳には約500の連絡先があり、サンダーバードと同期した後、何らかの理由で表示名がランダムに最後、最初、最初、最後になります。だから私は、最初に表示名を最後までやり直すために、簡単なウィジェットをまとめると思いました。私が使用するコードは以下のとおりですが、最後/最初の値を取得していません。カーソル内のキー(data1、data2)は存在しますが、値はそれぞれ「1」とnullでした。何か案は?

Cursor cursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, null, null, null);

        while (cursor.moveToNext() != false) {

        String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));

        String fname = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME));

        String lname = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME));

        if (lname != null && lname.length() > 0) {

              String sDName = lname + "," + fname;

              ContentValues values = new ContentValues();

              values.put(ContactsContract.Contacts.DISPLAY_NAME, sDName);

              getContentResolver().update(ContactsContract.Data.CONTENT_URI, values, ContactsContract.Contacts._ID+"=", new String[] {id});

        }

        }
4

1 に答える 1

0

ContactsContract.Dataには、住所、電話番号、電子メール、Webサイト、写真など、さまざまな種類の情報がすべて共有テーブルに含まれています。

関心のある情報を含む行を除外する必要があります。

クエリに、WHERE句を追加します。

query(ContactsContract.Data.CONTENT_URI,  Data.MIMETYPE + "=?", 
    new String[]{StructuredName.CONTENT_ITEM_TYPE}, null, null);

ContactsContract.Dataのドキュメントを参照してください

于 2010-09-03T12:59:28.260 に答える