2011-10-17 3 views
0

내 애플리케이션에서 android에 연락처를 추가하려고합니다. 이를 위해 모든 데이터를 가져 와서 의도를 통해 전달합니다.ACTION_EDIT로 활동 시작하고 LOOKUP_KEY를 전달하면 NumberFormatException이 발생합니다.

그리고, 삽입하려고 할 때 연락처 추가 화면이 열리므로 사용자가 편집 할 수 있으므로 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(); 
     } 

    } 

는 그러나 문제는 ACTION_EDIT를 통과하면 LOOKUP_KEY에 대한 NumberFormatException이 (즉,이 0r17-3E483A46442C32324838 같은 것입니다) 반환한다는 것입니다. 연락처 추가 화면을 열려고하면 LOOKUP_KEY를 구문 분석 할 수 없습니다.

내가 어떻게해야합니까?

감사합니다.


업데이트 :

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

I이 전달되어야한다 : 여기서 I 대신 사항 setData 방식이를 전달, 이에 대한 해결책을 찾은 로그 캣

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 = new 인 텐트 (Intent.ACTION_INSERT_OR_EDIT); i.setType (ContactsContract.Contacts.CONTENT_ITEM_TYPE); i.putExtra (Insert.NAME, "TESTTEST"); i.putExtra (Insert.PHONE, "209384"); startActivity (i); 이 작업이 끝나면 intent.setData()에서 연락처 URI.paarse() 메소드를 확인하십시오. – user370305

+0

나는 그것을 전에 그렇게했다. 나는 다른 방법으로 바꾸기 때문에 화면의 두 번째 필드에 성을 삽입하고 마지막 옵션은 제공하지 않습니다. – rogcg

답변

2

인 :

그리고 setData() 메서드에서 res 유형 즉 URI 유형을 전달합니다.


question은 많은 도움이되었습니다.

관련 문제