Android 同一类中有多个onActivityResult{}?

Android 同一类中有多个onActivityResult{}?,android,android-activity,Android,Android Activity,我在我的应用程序上做了一些对话框选择器,并在我的onClickListener上使用了一个开关盒,但是对话框要求在activityresult{}上使用一个,但是如果我添加2个,应用程序就会崩溃。。。我可以把它们放在同一个onActivityResult{}中,通过结果代码调用它们吗?代码如下: @Override public void onClick(View arg0) { // TODO Auto-generated method stub swi

我在我的应用程序上做了一些对话框选择器,并在我的
onClickListener上使用了一个开关盒
,但是对话框要求在activityresult{}上使用一个
,但是如果我添加2个,应用程序就会崩溃。。。我可以把它们放在同一个
onActivityResult{}
中,通过结果代码调用它们吗?代码如下:

@Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        switch(arg0.getId()){
            case R.id.bContacts:

                Intent i = new Intent(Intent.ACTION_PICK, 
                        ContactsContract.Contacts.CONTENT_URI); 
                        startActivityForResult(i, PICK_CONTACT); 

                break;  

            case R.id.bRingtone:

                String uri = null;
                Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select ringtone for notifications:");
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_NOTIFICATION);
                startActivityForResult( intent, Set_Ringtone);

                break;
        }
    }

 @Override 
        protected void onActivityResult(int requestCode, int resultCode, Intent 
    data) 
        { 
         super.onActivityResult(requestCode, resultCode, data); 
            Cursor c = getContact(ContactsContract.CommonDataKinds.Phone.CONTENT_URI);

            if (c.moveToNext()) {
                String name = c
                        .getString(c
                                .getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
                callName.setText(name);
                String phoneNumber = c
                        .getString(c
                                .getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
                callNum.setText(phoneNumber);
                Log.d("Cont", "name "+name+" no. " + phoneNumber);
            } 
        } 


  @Override
    protected void onActivityResult(final int requestCode, final int resultCode, final Intent intent)
    {
        if (resultCode == Activity.RESULT_OK && requestCode == 5)
        {
             Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);

             if (uri != null)
             {

                 String ringTonePath = uri.toString();
                 Toast.makeText(this, "GOT IT" + ringTonePath, Toast.LENGTH_LONG).show();
             }
             else
             {
                 Toast.makeText(this, "DIDNT", Toast.LENGTH_SHORT).show();
             }
         }            
     }

您可以在同一个
onActivityResult()方法中处理这两个意图。这就是为什么在调用
startActivityForResult()
时,您会发送一个带有您意图的请求代码,当结果出来进行区分时,您会得到它。您的方法可以如下所示:

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    super.onActivityResult(requestCode, resultCode, data); 

    switch(requestCode) {
        case PICK_CONTACT:
           // handle the contact result
        break;

        case Set_Ringtone:
           // handle the ringtone result
        break;
    }
}

您的应用程序很可能会崩溃,因为如果您选择了错误的目的,您会尝试处理未提供的结果详细信息(例如,您尝试在此处读取联系人姓名,铃声结果将无法处理)。

仅此而已。我的开关盒以前没用过。。。因为我在2个OnActivityReuslt上的意图是不同的:protected void onActivityResult(最终int请求代码、最终int结果代码、最终意图)protected void onActivityResult(最终int请求代码、最终int结果代码、最终意图数据),所以当调用SET_铃声时,未解析意图。你的回答帮助我看到了光明!