2011-10-17 9 views
0

アプリケーションからアンドロイドで連絡先を追加しようとしています。そのために、私はすべてのデータを取得し、それをインテントで渡します。ACTION_EDITでアクティビティを開始し、LOOKUP_KEYを渡すとNumberFormatExceptionが発生します。

そして、私がしようとしているのは、挿入するとAdd Contact画面が開き、ユーザーが編集できるので、ACTION_EDITを使用しようとしています。

public void addNewContactToDevice() 
    { 
     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) 
      .build()); 
     ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
      .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex) 
      .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) 
      .withValue(StructuredName.GIVEN_NAME, person.getName()) 
      .withValue(StructuredName.FAMILY_NAME, person.getLastName()) 
      .build()); 
     ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
      .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex) 
      .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) 
      .withValue(Phone.NUMBER, person.getPhone()) 
      .withValue(Phone.TYPE, Phone.TYPE_MOBILE)     
      .build()); 

     try 
     { 
      ((Panel)activity).getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
      Cursor contactsCursor = activity.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
        new String[] {ContactsContract.Contacts.LOOKUP_KEY, ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID}, 
        ContactsContract.CommonDataKinds.Phone.NUMBER + " = ?" , 
        new String[] { PhoneNumberUtils.formatNumber(individualSelected.getPhone()) }, null); 

      contactsCursor.moveToFirst(); 

      String androidContactId = contactsCursor.getString(contactsCursor.getColumnIndex(LOOKUP_KEY)); 

      Intent intent = new Intent(Intent.ACTION_EDIT); 
      intent.setData(Uri.parse(ContactsContract.Contacts.CONTENT_LOOKUP_URI + "/" + androidContactId)); 
      ((Panel)activity).startActivityForResult(intent, 2); 
     } 
     catch (RemoteException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (OperationApplicationException e) 
     { 
      e.printStackTrace(); 
     } 

    } 

しかし、問題は(つまり、この0r17-3E483A46442C32324838ようなものです)ACTION_EDITを渡すとLOOKUP_KEYためのNumberFormatExceptionがを返す、ということです。連絡先の追加画面を開こうとすると、LOOKUP_KEYを解析できません。

私は何をすることが出来るのですか?

ありがとうございました。


UPDATEは:

intent.setData(Uri.parse(ContactsContract.Contacts.CONTENT_LOOKUP_URI + "/" + androidContactId)); 

私はこれを渡すべきである:ここで私が代わりにsetDataメソッドにこれを渡すので、このための解決策を見つけlogcat

10-18 08:54:59.003: ERROR/AndroidRuntime(7527): Caused by: java.lang.NumberFormatException: 0r17-3E483A46442C32324838 
10-18 08:54:59.003: ERROR/AndroidRuntime(7527):  at java.lang.Long.parse(Long.java:364) 
10-18 08:54:59.003: ERROR/AndroidRuntime(7527):  at java.lang.Long.parseLong(Long.java:354) 
10-18 08:54:59.003: ERROR/AndroidRuntime(7527):  at java.lang.Long.parseLong(Long.java:320) 
10-18 08:54:59.003: ERROR/AndroidRuntime(7527):  at android.content.ContentUris.parseId(ContentUris.java:41) 
10-18 08:54:59.003: ERROR/AndroidRuntime(7527):  at com.android.contacts.ui.EditContactActivity$QueryEntitiesTask.doInBackground(EditContactActivity.java:497) 
10-18 08:54:59.003: ERROR/AndroidRuntime(7527):  at com.android.contacts.ui.EditContactActivity$QueryEntitiesTask.doInBackground(EditContactActivity.java:471) 
10-18 08:54:59.003: ERROR/AndroidRuntime(7527):  at com.android.contacts.util.WeakAsyncTask.doInBackground(WeakAsyncTask.java:45) 
10-18 08:54:59.003: ERROR/AndroidRuntime(7527):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
10-18 08:54:59.003: ERROR/AndroidRuntime(7527):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
+0

申し訳ありません。私はコードを忘れてしまった。私が使用している正しいアクションはACTION_EDITです。 – rogcg

+0

この単純なインテントを試すi =新しいインテント(Intent.ACTION_INSERT_OR_EDIT);プロパティ。 i.putExtra(Insert.NAME、 "TESTTEST"); i.putExtra(Insert.PHONE、 "209384"); startActivity(i);この場合は、intent.setData()の連絡先URI.paarse()メソッドを確認してください。 – user370305

+0

私は前にそれを好きでした。私は画面の2番目のフィールドにLastNameを挿入したいので、別の方法に変更し、最後のオプションはそれを提供しません。 – rogcg

答えて

2

です:

Uri lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookup_key); 
Uri res = ContactsContract.Contacts.lookupContact(activity.getContentResolver(), lookupUri); 

であり、setData()メソッドでは、変数res、つまりURIタイプを渡します。


このquestionは私を大いに助けました!

関連する問題