2015-01-31 4 views
0

У меня есть метод выбора контактов, который использует два дополнительных параметра, чтобы указать, создаете ли вы новый ярлык контактов в моем приложении или редактируете существующий.Android Contact Picker Intent всегда возвращает пустое дополнение

Проблема в том, что независимо от того, что я делаю, дополнительные функции всегда кажутся нулевыми, что вызывает исключение nullPointerException при попытке получить к ним доступ.

Я подозреваю, что установка типа намерения на ContactsContract.Contacts.CONTENT_TYPE сбрасывает любые пользовательские дополнительные функции, но я не уверен.

Вот что я делаю в данный момент:

Контакты Picking Намерение

Intent intent = new Intent(Intent.ACTION_PICK); 
       intent.setType(ContactsContract.Contacts.CONTENT_TYPE); 
       Bundle extras = new Bundle(); 
       extras.putBoolean("isEditing", isEditing); 
       extras.putLong("shortcut", shortcut.getId()); 
       intent.putExtras(extras); 
       startActivityForResult(intent, PICK_CONTACT_REQUEST); 

И в onActivityResult()

switch (requestCode) { 
      case (PICK_CONTACT_REQUEST): 
       if (resultCode == getActivity().RESULT_OK) { 
        Uri contactData = data.getData(); 
        Bundle bundle = data.getExtras(); 
        Boolean isEditing = false; 
        long shortcutId = 0; 
        if (bundle != null) { 
         Toast.makeText(getActivity(), "Bundle Not Null", Toast.LENGTH_SHORT).show(); 
         if (bundle.containsKey("isEditing")) { 
          isEditing = bundle.getBoolean("isEditing", false); 
          Toast.makeText(getActivity(), "" + isEditing, Toast.LENGTH_SHORT).show(); 
         } 
         if (bundle.containsKey("shortcutId")) { 
          shortcutId = bundle.getLong("shortcutId", 0); 
          Toast.makeText(getActivity(), "" + shortcutId, Toast.LENGTH_SHORT).show(); 
         } 
        } 

Тосты никогда не показаны, так как Я не думаю, что пакет не найден. Я тоже пробовал другой рабочий процесс, используя Intent.putExtraString("isEditing", value), а затем получая их с intent.getStringExtra("isEditing", false), пропуская упаковку дополнительных компонентов в комплекте (не совсем понял разницу между двумя рабочими процессами), но, увы, я столкнулся с той же проблемой.

Любая помощь была бы принята с благодарностью.

ответ

0

Edit: Когда вы кладете значение long, вы

extras.putLong("shortcut", shortcut.getId()); 

Таким образом, вы должны получить его как

long shortcutId = bundle.getLong("shortcut", 0); 

Тогда вы должны получить Bundle статистов из Intent, запустившей Activity, как показано ниже.

switch (requestCode) { 
    case (PICK_CONTACT_REQUEST): 
     if (resultCode == getActivity().RESULT_OK) { 
      Uri contactData = data.getData(); 
      //Here you get the intent extras 
      Bundle bundle = getIntent().getExtras(); 
      //Boolean isEditing = false; 
      //long shortcutId = 0; 
      if (bundle != null) { 
       Toast.makeText(getActivity(), "Bundle Not Null", Toast.LENGTH_SHORT).show(); 
       if (bundle.hasExtras()){ 
        boolean isEditing = bundle.getBoolean("isEditing", false);        
        long shortcutId = bundle.getLong("shortcut", 0); 
        if(isEditiong != null) 
         Toast.makeText(getActivity(), "" + isEditing, Toast.LENGTH_SHORT).show(); 
        if(shortcutId != null) 
         Toast.makeText(getActivity(), "" + shortcutId, Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }    
    } 
    break; 
}