1

ギャラリーから画像を選択してアプリケーションで使用する際に問題が発生しています。私はこの意図を使用します:

Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, ACTIVITY_SELECT_PHOTO);

すると、画像を選択できるギャラリーに移動します。しかし、onActivityResultACTION_PICK がすべてを終了していない間に、1 つを選択した瞬間にすぐに呼び出されます。まあ、それが問題だと思います。launchModeマニフェストのアクティビティでtoを変更しようとする必要があることを読みましsingleTopたが、これは機能しませんでした。launchModeまたは、「ACTION_PICK」アクティビティを変更する必要がありますか? そして、これは可能ですか?

final static int ACTIVITY_SELECT_PHOTO = 0;
final static int ACTIVITY_CAMERA_PHOTO = 1;

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 
    Log.d("onActivityresult", "req = " + requestCode + ", result = " + resultCode);
    switch(requestCode) { 
    case ACTIVITY_SELECT_PHOTO:
        if(resultCode == RESULT_OK){  

            Uri selectedImageUri=imageReturnedIntent.getData();
            String actualPath=getRealPathFromURI(selectedImageUri);
            File file=new File(actualPath);
            Bitmap b=decodeFile(file); //this is new bitmap which you can use for your purpose 

            try {
                ByteArrayOutputStream os = new ByteArrayOutputStream();
                b.compress(Bitmap.CompressFormat.PNG, 55, os);
                compressedByteArray = os.toByteArray();
                iv.setImageBitmap(b);
                currentUser.put("picture", compressedByteArray);
                Toast t = Toast.makeText(this, "Uploading picture...", Toast.LENGTH_LONG);
                t.show();
                currentUser.save();
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    case ACTIVITY_CAMERA_PHOTO:
        if(resultCode == RESULT_OK){

            Bundle extras = imageReturnedIntent.getExtras();

            //THE LINE BELOW THIS ONE GIVES NULLPOINTEREX WHICH IS OBVIOUS BECAUSE IT's ANOTHER //CASE      
            Bitmap bmp = (Bitmap)extras.get("data");
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            bmp.compress(Bitmap.CompressFormat.PNG, 55, os);
            compressedByteArray = os.toByteArray();
            bmp = BitmapFactory.decodeByteArray(compressedByteArray, 0, compressedByteArray.length);
            iv.setImageBitmap(bmp);
            currentUser.put("picture", compressedByteArray);

        }
        try {
            Toast t = Toast.makeText(this, "Uploading picture...", Toast.LENGTH_LONG);
            t.show();
            currentUser.save();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

ResultCode = -1 (だから RESULT_OK) ですが、エラーが発生します:

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { dat=content://media/external/images/media/173 }} to activity {com.tapazz/com.tapazz.ShowProfileActivity}: java.lang.NullPointerException

nullPointerException は別の RequestCode から発生します (上記の「THIS LINE」を参照)。

アプリは停止しますが、再起動すると、本来のように写真が選択されていることがわかります

4

1 に答える 1

0

これは関連している場合と関連していない場合がありますが、あなたのswitch()ステートメントはbreak各ケースの後にはありません。したがって、ACTIVITY_SELECT_PHOTOケースに入ると、同様に処理ACTIVITY_CAMERA_PHOTOします

switch() {
   case 1:
      break;

   case 2:
      break;
}

break;それぞれの末尾に必ずステートメントが必要であることに注意してくださいcase

于 2012-05-30T17:07:39.657 に答える