14

ユーザーが連絡先を選択し、アプリを介してその連絡先にテキストを送信することが 1 つの側面であるアプリがあります。アプリは一部の連絡先でのみ機能し、他の連絡先では失敗します。より正確に:

手で連絡帳に入力した連絡先についてはIntent.ACTION_PICK、問題なく検索してアプリに戻すことができます。つまり、cursor.moveToFirst()本当です。

しかし、Facebook によってインポートされた連絡先 (私の電話は Facebook の連絡先と同期するように設定されていandroid.database.CursorIndexOutOfBoundsExceptionます) については、連絡先をクリックすると次のようになります。私が持っている明白な質問の 1 つは、文字通り連絡先を選択した後、結果のサイズが 0 になるのはなぜですか? なぜcursor.moveToFirst()偽ですか?

...Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
05-15 17:57:04.741: E/AndroidRuntime(21301):    at android.database.AbstractCursor.checkPosition(AbstractCursor.java:418)
05-15 17:57:04.741: E/AndroidRuntime(21301):    at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
05-15 17:57:04.741: E/AndroidRuntime(21301):    at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
05-15 17:57:04.741: E/AndroidRuntime(21301):    at android.database.CursorWrapper.getString(CursorWrapper.java:114)
05-15 17:57:04.741: E/AndroidRuntime(21301):    at com.company.Game.SendTextActivity.onActivityResult(SendTextActivity.java:118)
05-15 17:57:04.741: E/AndroidRuntime(21301):    at android.app.Activity.dispatchActivityResult(Activity.java:5436)
05-15 17:57:04.741: E/AndroidRuntime(21301):    at android.app.ActivityThread.deliverResults(ActivityThread.java:3188)
05-15 17:57:04.741: E/AndroidRuntime(21301):    ... 11 more

これが私のコードです:

ディスパッチの意図:

Intent pickContactIntent = new Intent(Intent.ACTION_PICK,  Uri.parse("content://contacts"));
pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers
    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);

onActivity の結果:

(requestCode == PICK_CONTACT_REQUEST) {
            // Get the URI that points to the selected contact
            Uri contactUri = data.getData();
            // We only need the NUMBER column, because there will be only one row in the result
            String[] projection = { Phone.NUMBER };

            // Perform the query on the contact to get the NUMBER column
            // We don't need a selection or sort order (there's only one result for the given URI)
            // CAUTION: The query() method should be called from a separate thread to avoid blocking
            // your app's UI thread. (For simplicity of the sample, this code doesn't do that.)
            // Consider using CursorLoader to perform the query.
            Cursor cursor = getContentResolver()
                .query(contactUri, projection, null, null, null);
            cursor.moveToFirst();

            // Retrieve the phone number from the NUMBER column
            int column = cursor.getColumnIndex(Phone.NUMBER);
            String number = cursor.getString(column);

            //do work with number here ...
        }

注: 連絡先が表示されます。しかし、Facebook のインポートされた連絡先を選択すると、クラッシュが発生します。

ところで: 私のコード スニペットは、Android チュートリアルから正確にコピーされます: http://developer.android.com/training/basics/intents/result.html

4

2 に答える 2

2

Contacts API を介して FB 連絡先にアクセスすることはできません。

于 2013-05-24T17:15:07.597 に答える