3

Androidエミュレーターで画像をキャプチャして保存しようとしています。画像はキャプチャされていますが、保存されているファイルが破損しています。

これを引き起こしている可能性がありますか?誰かが私が考えられるエラーポイントを特定するのを手伝ってもらえますか?

以下は私のコードです:

**public void onCreate**(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    **Intent** intent = new **Intent**("android.media.action.IMAGE_CAPTURE");
    try {
        fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
    } 

    catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    intent.putExtra(**MediaStore**.EXTRA_OUTPUT, fileUri);
    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}

@Override
**protected void onActivityResult**(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            StoreImage(this, data.getData(),
            mediaFile);
            finish();
        } 

        else if (resultCode == RESULT_CANCELED) {
            // User cancelled the image capture
        } 

        else {
            finish();
            try {
            } 

            catch (Exception e) {
               e.printStackTrace();
            }
        }
    }

}

スタックトレースは以下のとおりです::

04-05 23:55:40.369: E/AndroidRuntime(534): FATAL EXCEPTION: main
04-05 23:55:40.369: E/AndroidRuntime(534): java.lang.RuntimeException: Unable to start activity ComponentInfo{camera.android/camera.android.CameraActivity}: java.lang.NullPointerException: file
04-05 23:55:40.369: E/AndroidRuntime(534):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)

04-05 23:55:40.369: E/AndroidRuntime(534): Caused by: java.lang.NullPointerException: file
04-05 23:55:40.369: E/AndroidRuntime(534):  at android.net.Uri.fromFile(Uri.java:441)
04-05 23:55:40.369: E/AndroidRuntime(534):  at camera.android.CameraActivity.getOutputMediaFileUri(CameraActivity.java:72)
04-05 23:55:40.369: E/AndroidRuntime(534):  at camera.android.CameraActivity.onCreate(CameraActivity.java:34)
04-05 23:55:40.369: E/AndroidRuntime(534):  at android.app.Activity.performCreate(Activity.java:4465)
04-05 23:55:40.369: E/AndroidRuntime(534):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
04-05 23:55:40.369: E/AndroidRuntime(534):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
4

4 に答える 4

4

この線を入れ替えて、

if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
                if (resultCode == RESULT_OK) {

 if (resultCode == RESULT_OK) {
                    if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {

まず、子アクティビティが正常に終了したかどうかを確認します。

于 2012-04-05T04:44:32.737 に答える
4

マニフェスト ファイルに以下のアクセス許可を追加したかどうかを確認します::

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />

また、

fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);

保存したいファイル名も付けないといけないと思いますし、パスだけでは不十分です…。

于 2012-04-05T05:49:35.303 に答える
1

「@ Agarwal : onActivityResult の呼び出しについて」

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
            if (resultCode == RESULT_OK) {
                StoreImage(this, data.getData(), mediaFile);
                finish();

            } else if (resultCode == RESULT_CANCELED) {
                // User cancelled the image capture
            } else {
                finish();
                try {

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

        }

    }

「結果が成功した場合、インターンからのデータは、作成され、jpeg 形式で保存される n ファイルに保存されます」

public static void StoreImage(Context mContext, Uri imageLoc, File imageDir) {
        Bitmap bm = null;
        try {
            bm = Media.getBitmap(mContext.getContentResolver(), imageLoc);
            FileOutputStream out = new FileOutputStream(imageDir);
            bm.compress(Bitmap.CompressFormat.JPEG, 100, out);
            bm.recycle();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
于 2012-04-06T08:28:24.137 に答える