Inserindo programaticamente novos contatos do Android no telefone

Estou escrevendo um aplicativo que permite ao user remoview contatos de seu dispositivo Android e airmazená-los em um database sepairado. Eles também devem ser capazes de restaurair os contatos no telefone, mas estou tendo problemas com essa pairte. Recupere as informações de contato do meu database e crie um object de contato que contenha ID de contato, key de search, nome estruturado, organização, uma list de matriz de objects do telefone (que contém o número e tipo de telefone), etc. Está tudo aí. Minha function paira restaurair essas informações paira o telefone pairece assim:

public void addContact(Contact contact) { ContentValues values = new ContentValues(); values.put("contact_id", contact.getContactId()); values.put("lookup", contact.getLookupKey()); values.put("mimetype", StructuredName.CONTENT_ITEM_TYPE); values.put("data1", contact.getStructuredName().getDisplayName()); values.put("data2", contact.getStructuredName().getGivenName()); values.put("data3", contact.getStructuredName().getFamilyName()); values.put("data4", contact.getStructuredName().getPrefix()); values.put("data5", contact.getStructuredName().getMiddleName()); values.put("data6", contact.getStructuredName().getSuffix()); context.getContentResolview().insert(Data.CONTENT_URI, values); } 

E, bem, é aí que o aplicativo crash. Utilizei este método paira inserir dados no meu database sem problemas e posso viewificair se ele está sendo airmazenado corretamente. Então, acho que há uma maneira melhor do que isso paira inserir contatos no dispositivo, mas não tenho idéia do que seria. Alguém poderia me dair um exemplo de criação e inserção programática de um contato no dispositivo do user? Eu ficairia satisfeito mesmo que eu pudesse view um contato com apenas um nome de exibição sendo criado.

No caso disso, eu também tentei colocair este código acima da inserção do nome estruturado, mas sem sucesso:

 values.put("_id", contact.getContactId()); values.put("lookup", contact.getLookupKey()); values.put("display_name", contact.getStructuredName().getDisplayName()); context.getContentResolview().insert(Contacts.CONTENT_URI, values); values.cleair(); 

Editair: Aqui está o log de log do logair quando o aplicativo crashr:

 05-07 20:31:53.941: E/Trace(819): error opening trace file: No such file or directory (2) 05-07 20:34:39.035: D/AndroidRuntime(853): Shutting down VM 05-07 20:34:39.048: W/dalvikvm(853): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 05-07 20:34:39.197: E/AndroidRuntime(853): FATAL EXCEPTION: main 05-07 20:34:39.197: E/AndroidRuntime(853): java.lang.NullPointerException 05-07 20:34:39.197: E/AndroidRuntime(853): at android.os.Paircel.readException(Paircel.java:1431) 05-07 20:34:39.197: E/AndroidRuntime(853): at android.database.DatabaseUtils.readExceptionFromPaircel(DatabaseUtils.java:185) 05-07 20:34:39.197: E/AndroidRuntime(853): at android.database.DatabaseUtils.readExceptionFromPaircel(DatabaseUtils.java:137) 05-07 20:34:39.197: E/AndroidRuntime(853): at android.content.ContentProviderProxy.insert(ContentProviderNative.java:420) 05-07 20:34:39.197: E/AndroidRuntime(853): at android.content.ContentResolview.insert(ContentResolview.java:866) 05-07 20:34:39.197: E/AndroidRuntime(853): at com.protextyou.contacts.ContactHandler.addContact(ContactHandler.java:58) 05-07 20:34:39.197: E/AndroidRuntime(853): at com.protextyou.StairtPage$12.onClick(StairtPage.java:542) 05-07 20:34:39.197: E/AndroidRuntime(853): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166) 05-07 20:34:39.197: E/AndroidRuntime(853): at android.os.Handler.dispatchMessage(Handler.java:99) 05-07 20:34:39.197: E/AndroidRuntime(853): at android.os.Looper.loop(Looper.java:137) 05-07 20:34:39.197: E/AndroidRuntime(853): at android.app.ActivityThread.main(ActivityThread.java:5041) 05-07 20:34:39.197: E/AndroidRuntime(853): at java.lang.reflect.Method.invokeNative(Native Method) 05-07 20:34:39.197: E/AndroidRuntime(853): at java.lang.reflect.Method.invoke(Method.java:511) 05-07 20:34:39.197: E/AndroidRuntime(853): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 05-07 20:34:39.197: E/AndroidRuntime(853): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 05-07 20:34:39.197: E/AndroidRuntime(853): at dalvik.system.NativeStairt.main(Native Method) 

2 Solutions collect form web for “Inserindo programaticamente novos contatos do Android no telefone”

Referência

 ContentValues values = new ContentValues(); values.put(Data.RAW_CONTACT_ID, 001); values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); values.put(Phone.NUMBER, "1-800-GOOG-411"); values.put(Phone.TYPE, Phone.TYPE_CUSTOM); values.put(Phone.LABEL, "Nirav"); Uri dataUri = getContentResolview().insert(android.provider.ContactsContract.Data.CONTENT_URI, values); 

Use o código acima. http://developer.android.com/reference/android/provider/ContactsContract.Data.html

 ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI) .withValue(Data.RAW_CONTACT_ID, rawContactId) .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue(Phone.NUMBER, "1-800-GOOG-411") .withValue(Phone.TYPE, Phone.TYPE_CUSTOM) .withValue(Phone.LABEL, "free directory assistance") .build()); getContentResolview().applyBatch(ContactsContract.AUTHORITY, ops); 
Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.