2

私は VCard アプリケーションに取り組んでいます。ここで、デフォルトの連絡先アクティビティ (アドレス帳) を開始しました。

さて、お申し込みの流れはこんな感じで、

  • ユーザー アプリケーションを起動します。
  • デフォルトの連絡帳が開きます。
  • ユーザーがリストから連絡先を選択すると、選択した連絡先の Vcard が作成されます。

Back Buttonこれで、ユーザーが連絡先を選択せず​​に押すと、アプリが強制終了されます。

イベントをオーバーライド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)

ここでは、ユーザーはリストから連絡先を選択することになっていますが、ユーザーが連絡先を選択せず​​に戻るボタンを押すと、アプリが強制終了されます。

4

5 に答える 5

3

これを使って...

     @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);
   }
  }
}
于 2012-12-17T13:41:03.737 に答える
2

あなたの 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
     }
   }
}
于 2012-12-17T13:16:25.547 に答える
1
I have overidden BackKeyPress() event, but its not working. The app is still getting force closed.

backKeyPressed()イベントが に応答するためですDefault Contacts activity(Address Book)。Android アプリケーションのアクティビティではありません。

あなたのコードを見たのでonActivityResult()logcat エラーなしで、このクラッシュはDefault Contacts activity(Address Book)アプリケーション側ではなく側で発生する可能性があると思います。また、他のアプリケーションへの応答目的として(Resulted Intent)Default Contacts activity(Address Book)が処理されているかどうかも確認する必要があります。IntentonActivityResult()

したがって、ここではlogcat エラーがより役立ちます。

編集:

ええ、私には疑問がありますが、あなたの結果のデータNULL

操作を行う前に、 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);
}
于 2012-12-17T13:10:30.650 に答える
1

onActivityResult メソッドの 133 行目でスローされた NullPointerException が原因で、アプリケーションが強制終了されます。結果が有効かどうかを確認し、try catch をそこに入れます。

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)
于 2012-12-17T13:17:31.227 に答える
-1

連絡先が選択されていないというケースを管理していますか? ユーザーが押し返し、連絡先が選択されていない場合は、onActivityResult で「連絡先」が null であることを処理する必要があります。

于 2012-12-17T13:11:36.587 に答える