

Androidで、アクティビティから別のアクティビティに画像を受けわたす処理を書いているのですが、親のアクティビティに戻るときに以下のエラーが発生するのですが、原因がわかりません。  
エラーの解決策を教えていただきたいです。  
**_java.lang.NullPointerException: Attempt to invoke virtual method 'byte[]
android.os.Bundle.getByteArray(java.lang.String)' on a null object
reference_**

以下が子アクティビティのコードです。

[code]

    public class PhotoActivity extends AppCompatActivity {
        Bitmap bmp;
        ImageView mImageView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_photo_filter);
    
            Bundle extras = getIntent().getExtras();
            byte[] byteArray = extras.getByteArray(CropActivity.EXTRA_CROPPED_IMAGE);
    
            bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
            mImageView = findViewById(R.id.ImageView);
            mImageView.setImageBitmap(bmp);
        }
    }
    
[/code]

以下は親アクティビティです。

[code]

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_crop);
    
        Bundle extras = getIntent().getExtras();
        byte[] byteArray = extras.getByteArray(MainActivity.EXTRA_IMAGE);
        bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
        mCropView = findViewById(R.id.cropImageView);
        mCropView.setImageBitmap(bmp);
    }
    
    // 一部コード省略...
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
    
        if (id == R.id.action_next) {
            croppedBitmap = mCropView.getCroppedBitmap();
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            croppedBitmap.compress(Bitmap.CompressFormat.JPEG, 50, stream);
            byte[] byteArray = stream.toByteArray();
            Intent intent = new Intent(CropActivity.this, PhotoFilterActivity.class);
            intent.putExtra(EXTRA_CROPPED_IMAGE, byteArray);
            startActivity(intent);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    
[/code]

以下はAndroidManifestに指定しているactivityエレメントです。

[code]

    <activity android:name=".PhotoFilterActivity"
            android:label="Third Activity"
            android:parentActivityName=".CropActivity"
            android:screenOrientation="portrait">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.example.test.CropActivity" />
    </activity>
    
[/code]


CC BY-SA 4.0
2018-12-03T06:12:06.723
50853
2020-08-19T01:50:34.317
2018-12-03T09:14:16.573
28763
28763
question
android android-studio
Attempt to invoke virtual method 'byte[] android.os.Bundle.getByteArray〜というエラーが発生する。


AndroidManifest.xml の対象とする親アクティビティと子アクティビティ各々のactivity要素に
`android:launchMode="singleTop"` を書き足すことで、新しいアクティビティの作成を防ぐことができ、解決しました。

* * *

_この投稿は[@ayana sakai
さんのコメント](https://ja.stackoverflow.com/questions/50853/attempt-to-invoke-
virtual-method-byte-android-os-bundle-
getbytearray-%e3%81%a8%e3%81%84%e3%81%86%e3%82%a8%e3%83%a9%e3%83%bc%e3%81%8c%e7%99%ba#comment53162_50853)
の内容を元に コミュニティwiki として投稿しました。_


CC BY-SA 4.0
2020-08-19T01:50:34.317
69676
2020-08-19T01:50:34.317
3060
50853
answer