Закрытие приложения принудительной блокировкой нажатой клавиши «Назад»

Я работаю над приложением VCard. Здесь я начал работу по умолчанию Контакты (адресная книга).

Теперь поток приложений выглядит так:

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

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

Я BackKeyPress() событие BackKeyPress() , но он не работает. Приложение все еще закрывает силу.

Я отправляю код для справки,

  protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent, 1); Log.d("In Oncreate", "Activity Result"); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR Toast.makeText(getApplicationContext(), "Back Pressed", 5000).show(); finish(); return true; } return super.onKeyDown(keyCode, event); } @Override public void onActivityResult(int reqCode, int resultCode, Intent data) { super.onActivityResult(reqCode, resultCode, data); switch (reqCode) { case (1) : counter = "Yes"; Log.d("My Tag", data.getExtras().keySet().toString()); name_selected = data.getExtras().getString("android.intent.extra.shortcut.NAME"); Log.d("My Tag", name_selected)); Intent i = new Intent(getApplicationContext(), BusinessCardActivity.class); i.putExtra("name", name_selected); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); getApplicationContext().startActivity(i); } } } 

Ошибки Logcat: –

 12-17 18:41:09.399: E/AndroidRuntime(23456): FATAL EXCEPTION: main 12-17 18:41:09.399: E/AndroidRuntime(23456): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=0, data=null} to activity {com.android.business/com.android.business.ReadContacts}: java.lang.NullPointerException 12-17 18:41:09.399: E/AndroidRuntime(23456): at android.app.ActivityThread.deliverResults(ActivityThread.java:2536) 12-17 18:41:09.399: E/AndroidRuntime(23456): at android.app.ActivityThread.handleSendResult(ActivityThread.java:2578) 12-17 18:41:09.399: E/AndroidRuntime(23456): at android.app.ActivityThread.access$2000(ActivityThread.java:117) 12-17 18:41:09.399: E/AndroidRuntime(23456): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:961) 12-17 18:41:09.399: E/AndroidRuntime(23456): at android.os.Handler.dispatchMessage(Handler.java:99) 12-17 18:41:09.399: E/AndroidRuntime(23456): at android.os.Looper.loop(Looper.java:123) 12-17 18:41:09.399: E/AndroidRuntime(23456): at android.app.ActivityThread.main(ActivityThread.java:3729) 12-17 18:41:09.399: E/AndroidRuntime(23456): at java.lang.reflect.Method.invokeNative(Native Method) 12-17 18:41:09.399: E/AndroidRuntime(23456): at java.lang.reflect.Method.invoke(Method.java:507) 12-17 18:41:09.399: E/AndroidRuntime(23456): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:874) 12-17 18:41:09.399: E/AndroidRuntime(23456): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:632) 12-17 18:41:09.399: E/AndroidRuntime(23456): at dalvik.system.NativeStart.main(Native Method) 12-17 18:41:09.399: E/AndroidRuntime(23456): Caused by: java.lang.NullPointerException 12-17 18:41:09.399: E/AndroidRuntime(23456): at com.android.business.ReadContacts.onActivityResult(ReadContacts.java:133) 12-17 18:41:09.399: E/AndroidRuntime(23456): at android.app.Activity.dispatchActivityResult(Activity.java:3908) 12-17 18:41:09.399: E/AndroidRuntime(23456): at android.app.ActivityThread.deliverResults(ActivityThread.java:2532) 

Здесь пользователь должен выбрать контакт из списка, но если пользователь нажимает кнопку «Назад», не вызывая никакого контакта, приложение закрывает силу.

В вашем OnActivityResult () сделайте это ..

  @Override public void onActivityResult(int reqCode, int resultCode, Intent data) { super.onActivityResult(reqCode, resultCode, data); switch (reqCode) { case (1) : if (data != null && resultCode == RESULT_OK) { counter = "Yes"; // Do some operations on the selected contact } } } 

использовать это…

  @Override public void onActivityResult(int reqCode, int resultCode, Intent data) { super.onActivityResult(reqCode, resultCode, data); switch (reqCode) { case 1: if(data!=null&&resultCode==RESULT_OK){ counter = "Yes"; Log.d("My Tag", data.getExtras().keySet().toString()); name_selected = data.getExtras().getString("android.intent.extra.shortcut.NAME"); Log.d("My Tag", name_selected)); Intent i = new Intent(getApplicationContext(), BusinessCardActivity.class); i.putExtra("name", name_selected); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); getApplicationContext().startActivity(i); } } } 

Ваше приложение получает силу закрытой из-за исключения NullPointerException в строке 133 в вашем методе onActivityResult. Проверьте, является ли результат действительным и поместите некоторые попытки уловить там.

 12-17 18:41:09.399: E/AndroidRuntime(23456): Caused by: java.lang.NullPointerException 12-17 18:41:09.399: E/AndroidRuntime(23456): at com.android.business.ReadContacts.onActivityResult(ReadContacts.java:133) 
 I have overidden BackKeyPress() event, but its not working. The app is still getting force closed. 

Поскольку backKeyPressed() реагирует на Default Contacts activity(Address Book) по Default Contacts activity(Address Book) . Не для активности вашего Android-приложения.

Поскольку я видел ваш код для onActivityResult() и без ошибок logcat, я думаю, что этот сбой может произойти на стороне Default Contacts activity(Address Book) по Default Contacts activity(Address Book) не на стороне вашего приложения. Также вы должны проверить, что действие по Default Contacts activity(Address Book) обрабатывается любым Intent (итоговым намерением) для onActivityResult() качестве цели ответа другому приложению.

Поэтому ошибки logcat будут более полезными здесь.

РЕДАКТИРОВАТЬ:

Да, поскольку у меня есть сомнения, ваши приведенные данные NULL

Перед выполнением операции над Intent просто проверьте, являются ли data нулевыми или нет,

 if(data != null) { Log.d("My Tag", data.getExtras().keySet().toString()); name_selected = data.getExtras().getString("android.intent.extra.shortcut.NAME"); Log.d("My Tag", name_selected)); Intent i = new Intent(getApplicationContext(), BusinessCardActivity.class); i.putExtra("name", name_selected); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); getApplicationContext().startActivity(i); } 

Вы управляете случаем, что нет выбранного контакта? Если пользователь нажимает назад и не выбирается контакт, в вашем onActivityResult вы должны обращаться с тем, что «контакт» имеет значение NULL.