0

startActivityForResult と onActivityResult を別々に呼び出す 2 つのボタンがあります。1 つ目は連絡先ピッカー、2 つ目は画像ピッカーです。最初のものは正しく動作し、必要に応じて適切な連絡先番号を編集テキストに返します。2 番目は正常に開始され、ギャラリーから画像を選択できますが、画像が imagview に返されません。最初のデータからデータを返そうとしていると思いますが、最初のデータと2番目のデータを区別する方法がわかりません。私はアンドロイドに不慣れで、まだ学んでおり、間違いを犯しています。どこでどのように間違ったのかについての助けをいただければ幸いです。問題の私のコードは以下です。

Button.OnClickListener buttonClickListener3 = new Button.OnClickListener() {
    public void onClick(View contact) {
            Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
            startActivityForResult(intent, 1);
        }};

@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
    super.onActivityResult(reqCode, resultCode, data);

          if (resultCode == Activity.RESULT_OK) {
                Uri contactData = data.getData();
                Cursor cur = managedQuery(contactData, null, null, null, null);
                ContentResolver contect_resolver = getContentResolver();

                if (cur.moveToFirst()) {
                    String id = cur.getString(cur.getColumnIndexOrThrow(BaseColumns._ID));
                    String name = "";
                    String no = "";

                    Cursor phoneCur = contect_resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id }, null);

                    if (phoneCur.moveToFirst()) {
                        name = phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                        no = phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    }

                    Log.e("Phone no & name :***: ", name + " : " + no);
                    txt.append(name + " : " + no + "/n");

                    id = null;
                    name = null;
                    no = null;
                    phoneCur = null;
                }
                contect_resolver = null;
                cur = null;

            }
    }


    Button.OnClickListener buttonClickListener4 = new Button.OnClickListener() {
      public void onClick(View ChoosePictureButton) {
          Intent choosePictureIntent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
          startActivityForResult(choosePictureIntent, 2);


        }};


        public void onActivityResult2(int requestCode2, int resultCode2, Intent intent) {
          super.onActivityResult(requestCode2, resultCode2, intent);


          if (resultCode2 == RESULT_OK) {
            Uri imageFileUri = intent.getData();

            try {
              BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
              bmpFactoryOptions.inJustDecodeBounds = true;
              Bitmap bmp = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageFileUri), null, bmpFactoryOptions);
              bmpFactoryOptions.inSampleSize = 2;
              bmpFactoryOptions.inJustDecodeBounds = false;
              bmp = BitmapFactory.decodeStream(getContentResolver().openInputStream(
                      imageFileUri), null, bmpFactoryOptions);

              ChosenImageView.setImageBitmap(bmp);
            } catch (FileNotFoundException e) {
              Log.v("ERROR", e.toString());
            }
          }
        }
4

2 に答える 2

1

以下のように単一の onActivityResult() を使用してみてください

public void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);

      if (resultCode == Activity.RESULT_OK) {
switch(reqCode)
{
 case 1:
            Uri contactData = data.getData();
            Cursor cur = managedQuery(contactData, null, null, null, null);
            ContentResolver contect_resolver = getContentResolver();

            if (cur.moveToFirst()) {
                String id = cur.getString(cur.getColumnIndexOrThrow(BaseColumns._ID));
                String name = "";
                String no = "";

                Cursor phoneCur = contect_resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id }, null);

                if (phoneCur.moveToFirst()) {
                    name = phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                    no = phoneCur.getString(phoneCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                }

                Log.e("Phone no & name :***: ", name + " : " + no);
                txt.append(name + " : " + no + "/n");

                id = null;
                name = null;
                no = null;
                phoneCur = null;
            }
            contect_resolver = null;
            cur = null;

        }
}
break ;

case 2:
        Uri imageFileUri = intent.getData();

        try {
          BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
          bmpFactoryOptions.inJustDecodeBounds = true;
              Bitmap bmp =  
   BitmapFactory.decodeStream(getContentResolver().openInputStream(imageFileUri), null,  
 bmpFactoryOptions);
          bmpFactoryOptions.inSampleSize = 2;
          bmpFactoryOptions.inJustDecodeBounds = false;
          bmp = BitmapFactory.decodeStream(getContentResolver().openInputStream(
                  imageFileUri), null, bmpFactoryOptions);

          ChosenImageView.setImageBitmap(bmp);
        } catch (FileNotFoundException e) {
          Log.v("ERROR", e.toString());
        }
      }
    }
}

上記のようなものを使用してみてください

于 2012-09-22T13:40:07.877 に答える
0

onClickListener で、渡されるビューで getId を呼び出し、ボタンの ID に応じて異なるリクエスト コードで startActivityForResult を呼び出します。次に、onActivityResult で、受け取ったリクエスト コードに応じて切り替えます。

于 2012-09-22T14:19:28.807 に答える