1

array of Strings基本的にデバイス上のファイルのパスを含むを送信しようとしています。最初にユーザーSelects Picture 1、次にSelect Picture 2. ユーザーが完了すると、配列が読み込まれ、次のアクティビティに渡されます。変数を受信しようとすると、 が返されますNullPointer

主な活動:

case SELECT_PICTURE1:
    if (resultCode == RESULT_OK) {
        // code here that gets the image path
        // String leftImagePath contains the path of selected Image
        // Used toast to display the image path and it is not null
        finished = true;
    }
    break;

case SELECT_PICTURE2:
    if (resultCode == RESULT_OK) {
        //similar to Select Picture 1
        // String rightImagePath contains the path of selected Image
        if (finished == true) {
            Bundle b = new Bundle();
            b.putStringArray("stringArray", new String[] {
                LeftImageString, RightImageString });
            Intent i = new Intent(MainActivity.this, modifiedImage.class);
            i.putExtras(b);
            // finished = false;
        }
    }
    break;

ModifiedImage クラス:

Intent intent = getIntent();
_imagesPath = intent.getStringArrayExtra("IMAGES_PATH");
Bundle b= this.getIntent().getExtras();
_userImagePath = b.getStringArray("stringArray");


if (_imagesPath == null) {
    for (int i = 0; i <= 1; i++) {
         //null pointer on the following line because _userImagePath contains nothing.
        _imagesPath[i] = _userImagePath[i];
        _originalBitmaps[i] = BitmapFactory.decodeFile(_imagesPath[i]);
    }
}

私が間違ったことを誰か知っていますか?

4

2 に答える 2

2

このコードは明らかに壊れています:

if (_imagesPath == null) {
    for (int i = 0; i <= 1; i++) {
        _imagesPath[i] = _userImagePath[i];
        _originalBitmaps[i] = BitmapFactory.decodeFile(_imagesPath[i]);
    }
}

if ステートメントの本体に入ると、それが nullであることがわかりますが、変数に新しい値を割り当てることなく、ループ内で逆参照します。_imagesPath配列のクローンを作成したいだけのようです:

if (_imagesPath == null) {
    _imagesPath = _userImagePath.clone();
}

...または単に参照をコピーすることもできます:

if (_imagesPath == null) {
    _imagesPath = _userImagePath;
}

次に、適切な値ごとにこのコード行を無条件に実行したいのではないかと思います-以前にnulliだった場合にのみそれを実行したいのはなぜですか?_imagesPath

_originalBitmaps[i] = BitmapFactory.decodeFile(_imagesPath[i]);

(どこで初期化を行っているかは私にはわかりませんが_originalBitmaps、それは別の問題です。)

于 2013-09-21T15:44:25.257 に答える
1

ExtraでIMAGES_PATHを渡していないのに、なぜターゲットアクティビティで値を期待しているのですか

  Intent intent = getIntent();
    _imagesPath = intent.getStringArrayExtra("IMAGES_PATH"); 
    Bundle b= this.getIntent().getExtras();
    _userImagePath = b.getStringArray("stringArray");

_imagesPath が null の場合、コードで次のように _imagesPath を使用すると、NPEがスローされます

not '!' を追加するだけです。すべてを変える

if (_imagesPath != null) {

    for (int i = 0; i <= 1; i++) {
         //null pointer on the following line because _userImagePath contains nothing.
        _imagesPath[i] = _userImagePath[i];
        _originalBitmaps[i] = BitmapFactory.decodeFile(_imagesPath[i]);
    }
}
于 2013-09-21T15:44:14.943 に答える