标签: contactscontract

获取联系电话号码

我无法获得联系电话号码,我在日志猫中不断收到错误

02-24 19:40:42.772: ERROR/CursorWindow(21467): Bad request for field slot 0,-1. numRows = 1, numColumns = 24
Run Code Online (Sandbox Code Playgroud)

这是我的代码

import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
import android.widget.Button;
import android.widget.SimpleCursorAdapter;
import android.os.Bundle;


public class Contacts extends Activity {

private ListView mContactList;
private Button mAddContact;
private boolean mShowInvisible = false;
boolean set;
public String name = "";
public String id;
public String phone;

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.contact_listview); …
Run Code Online (Sandbox Code Playgroud)

android contacts contactscontract

3
推荐指数
1
解决办法
8311
查看次数

使用Contact id获取RawContact id

我已经构建了以下方法,以使用从Contacts表中获取的id从RawContacts表中获取id.此方法无法进行异常处理.

     public int getRawContactId(int contactId)
{
    String[] projection=new String[]{ContactsContract.RawContacts._ID};
    String selection=ContactsContract.RawContacts.CONTACT_ID+"=?";
    String[] selectionArgs=new String[]{String.valueOf(contactId)};
    Cursor c=context.getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI,projection,selection,selectionArgs , null);
    int rawContactId=c.getInt(c.getColumnIndex(ContactsContract.RawContacts._ID));
    Log.d(TAG,"Contact Id: "+contactId+" Raw Contact Id: "+rawContactId);
    return rawContactId;
}
Run Code Online (Sandbox Code Playgroud)

相应的Logcat如下所示:

           FATAL EXCEPTION: main
           java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, 
           request=1, result=-1, data=Intent {  
           dat=content://com.android.contacts/contacts/lookup/3844i21/993 flg=0x1 }} to    
           activity {com.example.contactbadger/com.example.contactbadger.MainActivity}: 
           android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a  
           size of 1
           at android.app.ActivityThread.deliverResults(ActivityThread.java:3367)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:3410)
           at android.app.ActivityThread.access$1100(ActivityThread.java:141)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1304)
           at android.os.Handler.dispatchMessage(Handler.java:99)
           at android.os.Looper.loop(Looper.java:137)
           at android.app.ActivityThread.main(ActivityThread.java:5103)
           at java.lang.reflect.Method.invokeNative(Native Method)
           at java.lang.reflect.Method.invoke(Method.java:525)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
           at …
Run Code Online (Sandbox Code Playgroud)

android contactscontract rawcontactid

3
推荐指数
1
解决办法
4703
查看次数

获取与一位联系人android相关的所有手机号码

我已经将联系人添加到我的通讯录中,该通讯录具有如下多个号码。

我想使用ContactsContract内容uri 提取“用户”的所有3个数字 。通过使用以下代码,我只有一个联系人。

 Cursor cursorAddressBook = mContentResolver.query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);

    if (cursorAddressBook != null) {
        while (cursorAddressBook.moveToNext()) {

            String dataName = cursorAddressBook.getString(cursorAddressBook.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            String dataNumber = cursorAddressBook.getString(cursorAddressBook.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            int dataType = cursorAddressBook.getInt(cursorAddressBook.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA2));
            String contactId = cursorAddressBook.getString(cursorAddressBook.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));

            Log.e("last updat Name last", dataName);
            Log.e("last updated No last", dataNumber);
            Log.e("last updated Type last", dataType);


        }
        cursorAddressBook.close();
    }
Run Code Online (Sandbox Code Playgroud)

android contactscontract

3
推荐指数
1
解决办法
519
查看次数

使用ContactsContract创建的新联系人不会显示在"联系人"应用中

我正在使用以下代码来创建新联系人.它紧跟Android提供的ContactManager示例.问题是,创建的联系人不会出现在Android附带的"联系人"应用中.然而,当我从电话簿加载所有联系人时,我可以看到新创建的联系人.

private void insertPBEntry()抛出RemoteException,OperationApplicationException {

     ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

     ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
             .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, "Account type")
             .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, "Account name")
             .build());

     ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
             .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
             .withValue(ContactsContract.Data.MIMETYPE,
                     ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
             .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "TOTAL_NEW")
             .build());
     ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
             .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
             .withValue(ContactsContract.Data.MIMETYPE,
                     ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
             .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "9090")
             .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,Phone.TYPE_MOBILE)
             .build());     
     getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

}
Run Code Online (Sandbox Code Playgroud)

我努力搜索但尚未找到答案.我找到了一个答案,表明问题可能与我的字符串"帐户类型"和"帐户名称"有关.就我而言,我不需要创建任何帐户.我想要的是添加一个新的联系人姓名,电子邮件/邮件地址,电话.

多谢你们!

android contactscontract

2
推荐指数
2
解决办法
2万
查看次数

ContactsContract查找联系ID的电话号码

我试图通过他们的contactId查找联系人的电话号码,bll结果返回 - 电话号码:1

我尝试过围绕SO使用其他示例,但我一直在光标上得到0计数

Uri uri = ContentUris.withAppendedId(Data.CONTENT_URI, contactId);

Log.i(TAG, "Locate Contact by Id: " + contactId + " at Uri: " + uri.toString());

Cursor cursor = this.getContentResolver().query(uri, null, null, null, null);

try {
    if (cursor.moveToFirst()) {
        Log.i(TAG, "Phone Number: " + cursor.getString(cursor.getColumnIndex(Phone.NUMBER)));
    }
} finally {
    cursor.close();
}
Run Code Online (Sandbox Code Playgroud)

android uri contactscontract

2
推荐指数
1
解决办法
8710
查看次数

获取电子邮件ID的联系人

我需要通过电子邮件获取联系人信息(光标).它们必须是截然不同的 如果他收到电子邮件,每个联系人必须有一个条目.怎么做?我的目标是新的联系人API附带2.0.

1)我尝试使用CursorJoiner来做,但发生了一件奇怪的事情.这是我的代码:

MatrixCursor matCur = new MatrixCursor(
            new String[]{
            Contacts._ID,
                Contacts.DISPLAY_NAME,
                "photo_id",
                "starred"
            }
        );

Cursor newContactCursor = managedQuery(
        ContactsContract.Contacts.CONTENT_URI,
            new String[]{
                Contacts._ID,
                Contacts.DISPLAY_NAME,
                "photo_id",
                "starred"
            },
            null,
            null,
            null//Contacts._ID 
        );

newContactCursor.moveToFirst();

Cursor emailCur = managedQuery(
        ContactsContract.CommonDataKinds.Email.CONTENT_URI,
            new String[] {  
                Email.CONTACT_ID,
                Email.DATA1
            },
            null,
            null,
            Email.CONTACT_ID
        );

            emailCur.moveToFirst();

CursorJoiner joiner = new CursorJoiner(
        newContactCursor, 
            new String[]{Contacts._ID}, 
            emailCur, 
            new String[] {Email.CONTACT_ID}
        );

for (CursorJoiner.Result joinerResult : joiner) {
        switch (joinerResult) {

        case LEFT:
        // handle case where a row in …
Run Code Online (Sandbox Code Playgroud)

email android cursor contactscontract

2
推荐指数
1
解决办法
6899
查看次数

如何在Android设备上获取用户个人资料

我希望能够自动将信息输入到创建帐户表单中,并根据用户已输入设备的信息(如姓名,电子邮件地址,电话号码)建议可能性.我需要一种与API级别8兼容的方法.

android google-account contactscontract accountmanager android-contacts

2
推荐指数
1
解决办法
1万
查看次数

如何在android中获取最后插入的本机联系人ID

我必须使用内容解析器获得不同的原始联系人ID.

ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, 
                    null, null, null, null);

if (cur.getCount() > 0){                    
   while (cur.moveToNext()){                          
        String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));                         
        String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

         System.out.println("id............"+id+"..."+name);                            
 }
}
Run Code Online (Sandbox Code Playgroud)

我已将所有联系人插入本机联系人.然后使用上面的代码我得到所有本机联系人ID.插入1个联系人后,如何一次获得一个id.请帮帮我.谢谢.

android contactscontract android-contacts

2
推荐指数
1
解决办法
1076
查看次数

如何在android中为联系人添加新字段

我想为现有联系人添加新的电子邮件地址.

我用这个代码:

    ArrayList<ContentProviderOperation> insertEmailList =
            new ArrayList<ContentProviderOperation>();
    Uri uri=null;
    for (ContactEmail contactEmail : emails) {
        values.put(ContactsContract.Data.RAW_CONTACT_ID, id);
        values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
        values.put(ContactsContract.CommonDataKinds.Email.ADDRESS, contactEmail.getEmailAddress());
        values.put(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_CUSTOM);
        uri=contentResolver.insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
    }
Run Code Online (Sandbox Code Playgroud)

当运行这段代码uricontent://com.android.contacts/data/2135,但我的联系方式也不无例外updated.my应用程序运行.

java android contactscontract android-contacts android-studio

2
推荐指数
1
解决办法
781
查看次数

如何在newInsert中将最后插入的RawContacts ID编程到地址簿中?

我成功地将联系人插入到地址簿中,我需要在我的应用程序中保存联系人的参考.我认为保存引用的最佳方法是获取RawContacts ID本身.

有没有办法让我在插入新联系人后立即从地址簿中取回ID?或者我是否必须获取所有记录并将其与我的数据进行比较以获取RawContacts ID?

我使用此代码执行插入操作:

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
int rawContactInsertIndex = ops.size();
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
    .withValue(RawContacts.ACCOUNT_TYPE, null)
    .withValue(RawContacts.ACCOUNT_NAME, null)
    .withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DISABLED)
    .build());
Run Code Online (Sandbox Code Playgroud)

我感谢任何输入,无论是变通方法还是API.谢谢!

android contactscontract rawcontacts

1
推荐指数
1
解决办法
1772
查看次数