1

写真を撮ると、以下のエラーが表示されます。アプリは HTC rhyme と Galaxy Tab 7.7 で完全に動作することに注意してください。どのように修正できますか?

    08-06 13:18:29.084: E/AndroidRuntime(27803): FATAL EXCEPTION: main
08-06 13:18:29.084: E/AndroidRuntime(27803): java.lang.RuntimeException: Unable to resume activity {ua.mirkvartir.android.frontend/ua.mirkvartir.android.frontend.AddFillActivityApp}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=12, result=-1, data=null} to activity {ua.mirkvartir.android.frontend/ua.mirkvartir.android.frontend.AddFillActivityApp}: java.lang.NullPointerException
08-06 13:18:29.084: E/AndroidRuntime(27803):    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2608)
08-06 13:18:29.084: E/AndroidRuntime(27803):    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2636)
08-06 13:18:29.084: E/AndroidRuntime(27803):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2103)
08-06 13:18:29.084: E/AndroidRuntime(27803):    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3576)
08-06 13:18:29.084: E/AndroidRuntime(27803):    at android.app.ActivityThread.access$700(ActivityThread.java:138)
08-06 13:18:29.084: E/AndroidRuntime(27803):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
08-06 13:18:29.084: E/AndroidRuntime(27803):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-06 13:18:29.084: E/AndroidRuntime(27803):    at android.os.Looper.loop(Looper.java:137)
08-06 13:18:29.084: E/AndroidRuntime(27803):    at android.app.ActivityThread.main(ActivityThread.java:4905)
08-06 13:18:29.084: E/AndroidRuntime(27803):    at java.lang.reflect.Method.invokeNative(Native Method)
08-06 13:18:29.084: E/AndroidRuntime(27803):    at java.lang.reflect.Method.invoke(Method.java:511)
08-06 13:18:29.084: E/AndroidRuntime(27803):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
08-06 13:18:29.084: E/AndroidRuntime(27803):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
08-06 13:18:29.084: E/AndroidRuntime(27803):    at dalvik.system.NativeStart.main(Native Method)
08-06 13:18:29.084: E/AndroidRuntime(27803): Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=12, result=-1, data=null} to activity {ua.mirkvartir.android.frontend/ua.mirkvartir.android.frontend.AddFillActivityApp}: java.lang.NullPointerException
08-06 13:18:29.084: E/AndroidRuntime(27803):    at android.app.ActivityThread.deliverResults(ActivityThread.java:3205)
08-06 13:18:29.084: E/AndroidRuntime(27803):    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2595)
08-06 13:18:29.084: E/AndroidRuntime(27803):    ... 13 more
08-06 13:18:29.084: E/AndroidRuntime(27803): Caused by: java.lang.NullPointerException
08-06 13:18:29.084: E/AndroidRuntime(27803):    at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1094)
08-06 13:18:29.084: E/AndroidRuntime(27803):    at android.content.ContentResolver.query(ContentResolver.java:354)
08-06 13:18:29.084: E/AndroidRuntime(27803):    at android.content.ContentResolver.query(ContentResolver.java:313)
08-06 13:18:29.084: E/AndroidRuntime(27803):    at android.support.v4.content.CursorLoader.loadInBackground(CursorLoader.java:49)
08-06 13:18:29.084: E/AndroidRuntime(27803):    at ua.mirkvartir.android.frontend.AddFillActivityApp.getRealPathFromURI(AddFillActivityApp.java:844)
08-06 13:18:29.084: E/AndroidRuntime(27803):    at ua.mirkvartir.android.frontend.AddFillActivityApp.onActivityResult(AddFillActivityApp.java:704)
08-06 13:18:29.084: E/AndroidRuntime(27803):    at android.app.Activity.dispatchActivityResult(Activity.java:5492)
08-06 13:18:29.084: E/AndroidRuntime(27803):    at android.app.ActivityThread.deliverResults(ActivityThread.java:3201)

forResult 呼び出し

Calendar c = Calendar.getInstance();
                                ContentValues values = new ContentValues();
                                values.put(MediaStore.Images.Media.TITLE,
                                        "zdanie " + c.getTime());
                                mCapturedImageURI = getContentResolver()
                                        .insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                                                values);
                                Intent intentPicture = new Intent(
                                        MediaStore.ACTION_IMAGE_CAPTURE);
                                intentPicture.putExtra(MediaStore.EXTRA_OUTPUT,
                                        mCapturedImageURI);
                                startActivityForResult(intentPicture, 12);

onResult

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 12 && resultCode == RESULT_OK) {
            // photo1 = getRealPathFromURI(mCapturedImageURI);
            saveFile(
                    decodeSampledBitmapFromResource(
                            getRealPathFromURI(mCapturedImageURI), 800, 800), 1);
            pho1.setImageBitmap(decodeSampledBitmapFromResource(
                    getRealPathFromURI(mCapturedImageURI), 80, 60));
            miss1 = 1;

        } 
}

getRealPath

   public String getRealPathFromURI(Uri contentUri) {
        if (contentUri==null){
            Log.e("RealPath", "URI: null");
        }else Log.e("RealPath", "URI: "+contentUri.toString());
        try {
            String[] proj = { MediaStore.Images.Media.DATA };
            CursorLoader loader = new CursorLoader(getApplicationContext(),
                    contentUri, proj, null, null, null);
            Cursor cursor = loader.loadInBackground();
            int column_index = cursor
                    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        } catch (Exception e) {
            Log.e("RealPath", e.toString());
            e.printStackTrace();
        }
        return "";
    }

realpath catch ブロックからの StackTrace

   08-06 15:33:23.520: W/System.err(22083): java.lang.NullPointerException
08-06 15:33:23.536: W/System.err(22083):    at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1097)
08-06 15:33:23.544: W/System.err(22083):    at android.content.ContentResolver.query(ContentResolver.java:357)
08-06 15:33:23.544: W/System.err(22083):    at android.content.ContentResolver.query(ContentResolver.java:316)
08-06 15:33:23.544: W/System.err(22083):    at android.support.v4.content.CursorLoader.loadInBackground(CursorLoader.java:49)
08-06 15:33:23.544: W/System.err(22083):    at ua.mirkvartir.android.frontend.AddFillActivityApp.getRealPathFromURI(AddFillActivityApp.java:842)
08-06 15:33:23.544: W/System.err(22083):    at ua.mirkvartir.android.frontend.AddFillActivityApp.onActivityResult(AddFillActivityApp.java:733)
08-06 15:33:23.544: W/System.err(22083):    at android.app.Activity.dispatchActivityResult(Activity.java:5436)
08-06 15:33:23.544: W/System.err(22083):    at android.app.ActivityThread.deliverResults(ActivityThread.java:3188)
08-06 15:33:23.544: W/System.err(22083):    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2592)
08-06 15:33:23.544: W/System.err(22083):    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2633)
08-06 15:33:23.544: W/System.err(22083):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2100)
08-06 15:33:23.544: W/System.err(22083):    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3563)
08-06 15:33:23.544: W/System.err(22083):    at android.app.ActivityThread.access$700(ActivityThread.java:135)
08-06 15:33:23.544: W/System.err(22083):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1207)
08-06 15:33:23.544: W/System.err(22083):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-06 15:33:23.552: W/System.err(22083):    at android.os.Looper.loop(Looper.java:137)
08-06 15:33:23.552: W/System.err(22083):    at android.app.ActivityThread.main(ActivityThread.java:4849)
08-06 15:33:23.552: W/System.err(22083):    at java.lang.reflect.Method.invokeNative(Native Method)
08-06 15:33:23.552: W/System.err(22083):    at java.lang.reflect.Method.invoke(Method.java:511)
08-06 15:33:23.552: W/System.err(22083):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
08-06 15:33:23.559: W/System.err(22083):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
08-06 15:33:23.559: W/System.err(22083):    at dalvik.system.NativeStart.main(Native Method)

編集さらに5台の電話でテストを行ったところ、すべて正常に動作しました。LG電話のみが問題を引き起こします。 編集:マネージドクエリの代わりにカーソルローダーを使用しようとしました。同じ問題

4

2 に答える 2

3

一部のデバイスでは問題なく動作し、一部のデバイスでは問題なく動作する理由を知りたい場合:

ご覧のとおり、カメラ アプリは同じアプリではありません。実際、各カメラアプリは、在庫に付属しているものであっても、まったく異なります。

これとあなたの問題は何ですか?-インテント エクストラ をMediaStore.ACTION_IMAGE_CAPTURE 完全に無視する ことに反応するアプリケーションを阻止する人は誰もいません。MediaStore.EXTRA_OUTPUT

あなたのコードは、ユーザーによって選択されたアプリケーション (またはインストールされている既定のカメラ アプリ) が、指定されたパスにキャプチャされた画像を確実に保存することを前提としています。残念ながら、それが常に正しいとは限らないことを経験から知っています。

悲しいけれど事実です。MediaStore.EXTRA_OUTPUTユーザーがそのようなカメラ アプリや、LG シリーズのデフォルトのカメラ アプリのような特定のデバイスを使用すると思われる場合は、当てにできません。

この場合、@Arun C Thomas によって提案されたアプローチで画像を取得できるかもしれませんが、悲しいことに、カメラアプリがデータ自体を結果に保存していない場合、getData() は必ずしも何かをもたらすとは限りません。

そのため、この場合にアプリがクラッシュするのを防ぐために、null を検証するか、「try/catch」を実行する必要があります...

于 2013-08-10T07:43:27.850 に答える