Android Intent.ACTION\u PICK为某些联系人返回空光标
我有一个应用程序,其中一个方面是让用户选择一个联系人,并通过该应用程序向该联系人发送文本。该应用程序仅适用于某些联系人,其他联系人则无法使用。更准确地说: 对于我手动输入联系人簿的联系人,Android Intent.ACTION\u PICK为某些联系人返回空光标,android,sqlite,android-intent,contacts,android-cursor,Android,Sqlite,Android Intent,Contacts,Android Cursor,我有一个应用程序,其中一个方面是让用户选择一个联系人,并通过该应用程序向该联系人发送文本。该应用程序仅适用于某些联系人,其他联系人则无法使用。更准确地说: 对于我手动输入联系人簿的联系人,Intent.ACTION\u PICK在查找并返回到应用程序时没有问题,即cursor.moveToFirst()为true 但是对于Facebook导入的联系人(我的手机设置为与Facebook联系人同步),单击联系人后,我会得到以下android.database.CursorIndexOutOfBoun
Intent.ACTION\u PICK
在查找并返回到应用程序时没有问题,即cursor.moveToFirst()
为true
但是对于Facebook导入的联系人(我的手机设置为与Facebook联系人同步),单击联系人后,我会得到以下android.database.CursorIndexOutOfBoundsException
。我有一个突出的问题:为什么在我真的选择了一个联系人之后,结果大小是0?为什么cursor.moveToFirst()为false
...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);
激活结果:
(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教程中复制的:您不能通过contacts API访问FB contacts。要修复崩溃,您应该检查moveToFirst()的结果,如下所示:
String number = null;
if (cursor.moveToFirst()) {
number = cursor.getString(0); // 0 matches the index of NUMBER in your projection.
}
为了探索可供您使用的数据的性质,我将为投影传递“null”,以便所有字段返回,并转储字段名称和值。您可能会发现您正在查找的数据,只是不在数字字段中。请注意,对于Facebook联系人cursor.moveToFirst()
返回false。我不仅仅对绷带感兴趣,比如抓破例。我知道如何检查cursor.moveToFirst()
。我需要知道的是如何获得这些联系人的号码。此评论与您的问题无关。。。因为您使用的是投影,所以不需要调用.getColumnIndex(…)。列索引将与投影字符串数组中该列的索引匹配。