0

これは私が予想もしなかった私の最初の奇妙な結果です。これは、その分野のスキルが不足している可能性があります。

さて、私はボタンを持っていました、それを通して私は電話ギャラリーから(おそらくsdcardから)画像を選択する必要があります。暗黙のインテントを使用して電話ギャラリーを呼び出し、で絶対画像パスを取得しましたstartActivityForResult()。すぐに別のアクティビティを呼び出して、そのパスをに設定しstartActivity()ます。

私のシナリオによると、onClick()ofボタンに次のコードを記述しました。

@Override
public void onClick(View v) {
        upLoadPhoto();
}

protected void upLoadPhoto() {

    Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
    intent.setType("image/*");
    intent.putExtra("return-data", true);
    System.out.println("select image");
    startActivityForResult(intent, 1);
    startActivity(next);
    finish();
}

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
            if(requestCode == 1 && data != null && data.getData() != null){
                Uri uri = data.getData();
                if (uri != null) {
                    Cursor cursor = getContentResolver().query(uri, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null);
                    cursor.moveToFirst();
                    final String imageFilePath = cursor.getString(0);
                    System.out.println("Background : "+imageFilePath);
                    next.putExtra("backImagePath", imageFilePath);
                    cursor.close();
            super.onActivityResult(requestCode, resultCode, data);
        }
    }
}

ボタンをクリックすると、startActivity(next)が最初に呼び出され、次にstartActivityForResult(intent,1)が呼び出されます。バンドルオブジェクトを介して2番目のアクティビティでイメージパスを取得しようとしているので、最初に呼び出されているNullPointerExceptionために取得しています。startActivity(next)

デバッグポイントが期待どおりではないことを確認したときに、顎を落としました。この問題の正確な理由がわかることを願っています。

ありがとう
Aswin

4

4 に答える 4

0

その関数からそれを削除し、データを取得した後startActivity(next)にそれを置きますonActivityResult

于 2012-09-17T07:21:32.270 に答える
0

ギャラリーから画像が正常に選択されたら、startActivity()内部に電話をかけます。それが画像を取得するためにギャラリーに行くonActivityResult()とき、それまでは解雇され、あなたは次のアクティビティに移動するからです。startActivityForResult()startActivity()

于 2012-09-17T07:21:32.247 に答える
0

コールをstartActivity(next);に移動するのはどうですかonActivityResult()...この方法では、パスを取得した後、他のアクティビティに移動します

protected void upLoadPhoto() {

Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType("image/*");
intent.putExtra("return-data", true);
System.out.println("select image");
startActivityForResult(intent, 1);

finish();

}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == 1 && data != null && data.getData() != null){
            Uri uri = data.getData();
            if (uri != null) {
                Cursor cursor = getContentResolver().query(uri, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null);
                cursor.moveToFirst();
                final String imageFilePath = cursor.getString(0);
                System.out.println("Background : "+imageFilePath);
                next.putExtra("backImagePath", imageFilePath);
                cursor.close();

            startActivity(next);

        super.onActivityResult(requestCode, resultCode, data);
    }
}

}

于 2012-09-17T07:20:38.630 に答える
0

そのstartActivity(next)をその関数から削除し、get1の後にonActivityResultに配置します。次のインテントを追加します。

于 2012-09-17T07:35:16.427 に答える