0

ギャラリーまたはカメラから画像を選択する次のコードがあります。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
        case SELECT_PICTURE_ACTIVITY_REQUEST_CODE:
            if (resultCode == RESULT_OK) {
                Uri selectedImage = data.getData();
                String[] filePathColumn = { MediaStore.Images.Media.DATA,
                        MediaStore.Images.Media.DISPLAY_NAME };
                Cursor cursor = getContentResolver().query(selectedImage,
                        filePathColumn, null, null, null);
                if (cursor.moveToFirst()) {
                    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                    String filePath = cursor.getString(columnIndex);
                    ext = filePath
                            .substring(filePath.lastIndexOf(".") + 1);
                    photod = BitmapFactory.decodeFile(filePath);

                    new AsyncTaskOne().execute(new String[] {});
    (fileNameIndex);


                }
            }
            break;

        case SELECT_CAMERA_ACTIVITY_REQUEST_CODE:
            if (requestCode == CAMERA_REQUEST) {
                photod = (Bitmap) data.getExtras().get("data");
                new AsyncTaskOne().execute(new String[] {});
            }
        }
    }

確認ボタンを押すと、このリスナーが呼び出されます

OnClickListener confirm = new OnClickListener() {
        public void onClick(View v) {
            Intent i = new Intent("com.striget.eu.UpdatePhoto");
            i.putExtra(PropertiesUpdatedPhoto.EXTRA_PHOTO, codedPhoto);
            i.putExtra(PropertiesUpdatedPhoto.EXTRA_EXT, ext);
            startActivity(i);
        }
    };

(ここで、codedPhotoは別の方法で base64 でコード化された画像です) 別のアクティビティで画像とその拡張子を送信します

小さな画像ではすべて正常に動作しますが、中サイズの画像または大きな写真 (それほど大きくない場合も) を選択すると、アプリがフリーズし、画面が黒くなり、数分待つとエラーが表示されずに現在のアクティビティに戻りますスタックにあり、呼び出されたインテントPropertiesUpdatedPhotoは開始されません。

どうすればこの問題を解決できますか?

4

1 に答える 1

1

この問題についてはここで説明します。インテントの余分なコンテンツをできるだけ小さくする必要があります。

私の提案は、画像を渡す代わりに、おそらく画像のURIまたはパスを渡す方がより良い解決策になるでしょう。次に、そのアクティビティに画像のみをロードします。

例 :

OnClickListener confirm = new OnClickListener() {
    public void onClick(View v) {
        Intent i = new Intent("com.striget.eu.UpdatePhoto");
        i.setData(PropertiesUpdatedPhoto.EXTRA_PHOTO, # Image URI Here # );
        // Or i.putExtra(PropertiesUpdatePhoto.EXTRA_PHOTO, # Image Path Here #);
        i.putExtra(PropertiesUpdatedPhoto.EXTRA_EXT, ext);
        startActivity(i);
    }
};
于 2012-07-29T17:13:58.103 に答える