Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当我添加自定义联系人时,谷歌拨号器在Nexus4(4.4.2)崩溃_Android_Android Sqlite_Contacts - Fatal编程技术网

Android 当我添加自定义联系人时,谷歌拨号器在Nexus4(4.4.2)崩溃

Android 当我添加自定义联系人时,谷歌拨号器在Nexus4(4.4.2)崩溃,android,android-sqlite,contacts,Android,Android Sqlite,Contacts,我使用以下代码从应用程序中添加自定义联系人: public static void addContact(Searchable contact,String name,String ContactKey ,final Activity ctx){ initializeDB(ctx); if(Groupid== null) Groupid = getGroupId(ctx); ArrayList<ContentProviderOperation>

我使用以下代码从应用程序中添加自定义联系人:

public static void addContact(Searchable contact,String name,String ContactKey ,final Activity ctx){
    initializeDB(ctx);

    if(Groupid== null)
        Groupid = getGroupId(ctx);
    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
             .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
             .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
             .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, name)
             .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, contact.phone)
             .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,Phone.TYPE_WORK)
             .build());
     if(contact.phone2 !=" "){
     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, contact.phone2)
             .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,Phone.TYPE_WORK)
             .build());
     }
     if(contact.phone3 !=" "){
     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, contact.phone3)
             .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,Phone.TYPE_WORK)
             .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, contact.fax)
             .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,Phone.TYPE_FAX_WORK)
             .build());
     ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
             .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
             .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)
             .withValue(ContactsContract.CommonDataKinds.StructuredPostal.STREET,(" ".equals(contact.getAddress())?contact.location:contact.getAddress()))
             .build());
     ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
             .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
             .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)
             .withValue(ContactsContract.CommonDataKinds.Organization.COMPANY,ctx.getResources().getString(R.string.meuhedet))
             .build());
     ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
             .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
             .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE)
             .withValue(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID, Long.parseLong(Groupid))
             .build());

     ByteArrayOutputStream baos = new ByteArrayOutputStream();
     Bitmap photo = BitmapFactory.decodeResource(ctx.getResources(),R.drawable.logo_meuhedet);
     photo.compress(Bitmap.CompressFormat.PNG, 100, baos);
     ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
         .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
         .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)
         .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, baos.toByteArray())
         .build());

     try {
         ContentProviderResult [] res =ctx.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
         contactID = ContentUris.parseId(res[0].uri);
         boolean result = db.saveContactsIntoDatabase(contact.index, ContactKey, contactID);
         if(result){
            ((Activity) ctx).runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(ctx, R.string.successfully_saved_contact, Toast.LENGTH_SHORT).show();
                    }
                });
             }
    } catch (Exception e) {
    }
}
当我打开并查看应用程序崩溃的那一行时,它在这一行失败:

insert.bindString(2, updatedContactCursor.getString(PhoneQuery.PHONE_NUMBER));
有人发生过这个问题吗?问题是什么(我添加了这个字符串!!)?

我发现了问题

连接到的所有值都需要“ContactsContract.CommonDataTypes.Phone.NUMBER”不为null,因为当至少一个值为null时,代码会崩溃

这修复了我的异常:

12-23 11:17:55.172: E/AndroidRuntime(8233): FATAL EXCEPTION: AsyncTask #4
12-23 11:17:55.172: E/AndroidRuntime(8233): Process: com.google.android.dialer, PID: 8233
12-23 11:17:55.172: E/AndroidRuntime(8233): java.lang.RuntimeException: An error occured while executing doInBackground()
12-23 11:17:55.172: E/AndroidRuntime(8233):     at android.os.AsyncTask$3.done(AsyncTask.java:300)
12-23 11:17:55.172: E/AndroidRuntime(8233):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
12-23 11:17:55.172: E/AndroidRuntime(8233):     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
12-23 11:17:55.172: E/AndroidRuntime(8233):     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
12-23 11:17:55.172: E/AndroidRuntime(8233):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
12-23 11:17:55.172: E/AndroidRuntime(8233):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
12-23 11:17:55.172: E/AndroidRuntime(8233):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
12-23 11:17:55.172: E/AndroidRuntime(8233):     at java.lang.Thread.run(Thread.java:841)
12-23 11:17:55.172: E/AndroidRuntime(8233): Caused by: java.lang.IllegalArgumentException: the bind value at index 2 is null
12-23 11:17:55.172: E/AndroidRuntime(8233):     at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:164)
12-23 11:17:55.172: E/AndroidRuntime(8233):     at com.android.dialer.database.DialerDatabaseHelper.insertUpdatedContactsAndNumberPrefix(DialerDatabaseHelper.java:632)
12-23 11:17:55.172: E/AndroidRuntime(8233):     at com.android.dialer.database.DialerDatabaseHelper.updateSmartDialDatabase(DialerDatabaseHelper.java:784)
12-23 11:17:55.172: E/AndroidRuntime(8233):     at com.android.dialer.database.DialerDatabaseHelper$SmartDialUpdateAsyncTask.doInBackground(DialerDatabaseHelper.java:481)
12-23 11:17:55.172: E/AndroidRuntime(8233):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-23 11:17:55.172: E/AndroidRuntime(8233):     ... 4 more
    .....
        //need to check because if is null it crash dialer in SDK 4.4.2
             if(contact.phone != null && contact.phone !=" "){
             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, contact.phone)
                     .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,Phone.TYPE_WORK)
                     .build());
             }

             if(contact.phone2 != null && contact.phone2 !=" "){
                 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, contact.phone2)
                         .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,Phone.TYPE_WORK)
                         .build());
             }

             if(contact.phone3 != null && contact.phone3 !=" "){
                 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, contact.phone3)
                         .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,Phone.TYPE_WORK)
                         .build());
             }

             if(contact.fax != null && contact.fax !=" "){
             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, contact.fax)
                     .withValue(ContactsContract.CommonDataKinds.Phone.TYPE,Phone.TYPE_FAX_WORK)
                     .build());
             }

.....