【问题标题】:Failure delivering result ResultInfo{who=null In taking photo with Camera下发结果 ResultInfo{who=null 使用相机拍照失败
【发布时间】:2016-12-13 10:56:57
【问题描述】:

我看到另一个关于这个问题的问题,但没有一个有帮助。

在我的应用程序中,有两种不同的方法可以添加图像并将其显示在图像视图中。 1. 图库 - 2. 相机。

画廊方式工作得很好。

但是以相机方式(我正在使用原生 android 相机)我有一个令人困惑的问题。

如果我将手机旋转到纵向模式(以便加载纵向 xml)并以纵向模式拍摄照片,它可以正常工作。

如果我将它旋转到横向并在横向使用相机,它也可以正常工作。

现在,如果我的 xml 是纵向的,并且在进入相机后我将其旋转到横向(拍摄 lansdcape 照片)应用程序崩溃并给我这个错误:

05-08 21:34:22.974: E/AndroidRuntime(19000): FATAL EXCEPTION: main
05-08 21:34:22.974: E/AndroidRuntime(19000): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { act=inline-data (has extras) }} to activity {com.kpaxteam.babyalbum/com.tiktak.albums1.A2}: java.lang.NullPointerException
05-08 21:34:22.974: E/AndroidRuntime(19000):    at android.app.ActivityThread.deliverResults(ActivityThread.java:2918)
05-08 21:34:22.974: E/AndroidRuntime(19000):    at android.app.ActivityThread.handleSendResult(ActivityThread.java:2970)
05-08 21:34:22.974: E/AndroidRuntime(19000):    at android.app.ActivityThread.access$2000(ActivityThread.java:132)
05-08 21:34:22.974: E/AndroidRuntime(19000):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1068)
05-08 21:34:22.974: E/AndroidRuntime(19000):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-08 21:34:22.974: E/AndroidRuntime(19000):    at android.os.Looper.loop(Looper.java:150)
05-08 21:34:22.974: E/AndroidRuntime(19000):    at android.app.ActivityThread.main(ActivityThread.java:4277)
05-08 21:34:22.974: E/AndroidRuntime(19000):    at java.lang.reflect.Method.invokeNative(Native Method)
05-08 21:34:22.974: E/AndroidRuntime(19000):    at java.lang.reflect.Method.invoke(Method.java:507)
05-08 21:34:22.974: E/AndroidRuntime(19000):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-08 21:34:22.974: E/AndroidRuntime(19000):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-08 21:34:22.974: E/AndroidRuntime(19000):    at dalvik.system.NativeStart.main(Native Method)
05-08 21:34:22.974: E/AndroidRuntime(19000): Caused by: java.lang.NullPointerException
05-08 21:34:22.974: E/AndroidRuntime(19000):    at android.content.ContentResolver.acquireProvider(ContentResolver.java:745)
05-08 21:34:22.974: E/AndroidRuntime(19000):    at android.content.ContentResolver.query(ContentResolver.java:258)
05-08 21:34:22.974: E/AndroidRuntime(19000):    at com.tiktak.babyalbum.Helper.pathgal(Helper.java:161)
05-08 21:34:22.974: E/AndroidRuntime(19000):    at com.tiktak.babyalbum.Helper.resultpic(Helper.java:299)
05-08 21:34:22.974: E/AndroidRuntime(19000):    at com.tiktak.albums1.A2.onActivityResult(A2.java:242)
05-08 21:34:22.974: E/AndroidRuntime(19000):    at android.app.Activity.dispatchActivityResult(Activity.java:4053)
05-08 21:34:22.974: E/AndroidRuntime(19000):    at android.app.ActivityThread.deliverResults(ActivityThread.java:2914)

我的拍照意图:

                       Intent cameraIntent = new Intent("android.media.action.IMAGE_CAPTURE");
                       cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);  
                       act.startActivityForResult(cameraIntent, int2);

我的活动结果:

else if (requestCode == CAMERA_REQUEST) {
        if (resultCode == RESULT_OK) {
 Helper line 299--->        String capturedImageFilePath = Helper.pathgal(act, mCapturedImageURI);
            bmp = Helper.decodeFile(capturedImageFilePath, act);
            if(bmp != null )
            {
                try {
                    Helper.showpic(act, id1, bmp);
                    settings = act.getSharedPreferences(st1, 0);
                    settings.edit().putString(st2, capturedImageFilePath).putInt(st3, View.VISIBLE).putInt(st4, View.GONE).commit();;
                    img1 = (ImageView) act.findViewById(id1);
                    img2 = (ImageView) act.findViewById(id2);
                    img1.setVisibility(View.VISIBLE);
                    img2.setVisibility(View.GONE);
                } catch (OutOfMemoryError e) {
                    Toast.makeText(act.getApplicationContext(), "Try Again",
                            Toast.LENGTH_LONG).show();
                }


            }

获取图片文件路径码:

public static String pathgal(Activity act, Uri uri){

    String[] filePathColumn = {MediaStore.Images.Media.DATA};

 Helper 161--->   Cursor cursor = act.getContentResolver().query(uri, filePathColumn, null, null, null);

    if (cursor != null) {
    cursor.moveToFirst();

    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    String filePath = cursor.getString(columnIndex);
    cursor.close();

    return filePath;
    }
    return null;

}

有什么想法吗?

【问题讨论】:

  • 如果你调试,在抛出异常的那一行之前,各种变量(urifilePathColumn等)的值是多少?
  • filePathColumn 是光标上方 2 行中的字符串,uri 是我在 cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri) 中使用的那个 uri;

标签: java android camera


【解决方案1】:

使用以下代码

我也解决了同样的问题`

private void dispatchTakePictureIntent() {
        Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);

        timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        name=mode+"_"+img_type+"_"+timeStamp+".jpeg";
        output = new File(dir,name);
        cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(output));
                    startActivityForResult(cameraIntent, 1);


    }

在 onActivityResult 中使用 output.getAbsolutePath()(其中输出是我们用来创建 uri 以传递相机意图的文件))来获取该图像

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {

            if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {

String IMAGE_URL=output.getAbsolutePath();

            }

【讨论】:

  • 每次我的相机方向与底层活动不匹配时仍然无效。
【解决方案2】:

我应该在清单中将 android:configChanges="orientation" 添加到活动中。

谢谢大家。

【讨论】:

  • 每次我启动相机时仍然崩溃,旋转它并保持旋转直到我存储图片并返回缩略图。
  • @G_V 我认为你也应该添加 'android:configChanges="orientation|screenSize"'。
猜你喜欢
  • 2017-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多