Android 从摄影机意图将图像设置为2图像视图

Android 从摄影机意图将图像设置为2图像视图,android,android-intent,android-camera-intent,Android,Android Intent,Android Camera Intent,我有两个imageView,我想在其中设置来自摄影机的图像。当我希望有人能帮助启发我时,我有以下问题 当我拍摄第一张应该设置为imageView1的照片时,它设置为imageView2。第一张照片应该设置为imageView1 当我拍摄第二张照片并将相机中的图像保存到imageView1时,我的应用程序崩溃。第二张照片应该设置为imageView2 我使用的代码如下 public void Camera (View view) { Intent intent = new

我有两个imageView,我想在其中设置来自摄影机的图像。当我希望有人能帮助启发我时,我有以下问题

  • 当我拍摄第一张应该设置为imageView1的照片时,它设置为imageView2。第一张照片应该设置为imageView1

  • 当我拍摄第二张照片并将相机中的图像保存到imageView1时,我的应用程序崩溃。第二张照片应该设置为imageView2

  • 我使用的代码如下

        public void Camera (View view) {
            Intent intent = new Intent (MediaStore.ACTION_IMAGE_CAPTURE);
            file1 = Uri.fromFile(getOutputMediaFile());
            intent.putExtra(MediaStore.EXTRA_OUTPUT, file1);
    
            startActivityForResult(intent, 100);
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent 
        data) {
            if (requestCode == 100) {
                if (resultCode == RESULT_OK && imageView1 == null) {
                    imageView1.setImageURI(file1);
                } else {
                    imageView2.setImageURI(file1);
                }
            }
        }
    
    public void Camera (View view) {
        Intent intent = new Intent (MediaStore.ACTION_IMAGE_CAPTURE);
    
        if (file1 == null) {
            file1 = Uri.fromFile(getOutputMediaFile());
            intent.putExtra(MediaStore.EXTRA_OUTPUT, file1);
            startActivityForResult(intent, 1);
    
        } else {
    
            file2 = Uri.fromFile(getOutputMediaFile());
            intent.putExtra(MediaStore.EXTRA_OUTPUT, file2);
            startActivityForResult(intent, 2);
        }
    
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == 1) {
            if (resultCode == RESULT_OK) {
                imageView1.setImageURI(file1);
            }
        } else {
            imageView2.setImageURI(file2);
        }
    }
    
    日志:

    E/AndroidRuntime:致命异常:主 java.lang.OutOfMemoryError 在android.graphics.BitmapFactory.NativeDecodeseam(本机方法) 位于android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:623) 位于android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444) 位于android.graphics.drawable.drawable.createFromResourceStream(drawable.java:832) 位于android.graphics.drawable.drawable.createFromStream(drawable.java:783) 在android.widget.ImageView.resolveUri(ImageView.java:673)上 在android.widget.ImageView.setImageURI(ImageView.java:407)上 位于MainActivity.onActivityResult(MainActivity.java:117) 位于android.app.Activity.dispatchActivityResult(Activity.java:5563) 位于android.app.ActivityThread.deliverResults(ActivityThread.java:3514) 位于android.app.ActivityThread.handleSendResult(ActivityThread.java:3561) 在android.app.ActivityThread.access$1200(ActivityThread.java:168) 在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1377) 位于android.os.Handler.dispatchMessage(Handler.java:99) 位于android.os.Looper.loop(Looper.java:137) 位于android.app.ActivityThread.main(ActivityThread.java:5493) 位于java.lang.reflect.Method.Invokenactive(本机方法) 位于java.lang.reflect.Method.invoke(Method.java:525) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1209) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025) 在dalvik.system.NativeStart.main(本机方法)


    谢谢

    我已经成功获得了我想要的结果,将这两幅图像设置为各自的ImageView。我的修订代码如下

        public void Camera (View view) {
            Intent intent = new Intent (MediaStore.ACTION_IMAGE_CAPTURE);
            file1 = Uri.fromFile(getOutputMediaFile());
            intent.putExtra(MediaStore.EXTRA_OUTPUT, file1);
    
            startActivityForResult(intent, 100);
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent 
        data) {
            if (requestCode == 100) {
                if (resultCode == RESULT_OK && imageView1 == null) {
                    imageView1.setImageURI(file1);
                } else {
                    imageView2.setImageURI(file1);
                }
            }
        }
    
    public void Camera (View view) {
        Intent intent = new Intent (MediaStore.ACTION_IMAGE_CAPTURE);
    
        if (file1 == null) {
            file1 = Uri.fromFile(getOutputMediaFile());
            intent.putExtra(MediaStore.EXTRA_OUTPUT, file1);
            startActivityForResult(intent, 1);
    
        } else {
    
            file2 = Uri.fromFile(getOutputMediaFile());
            intent.putExtra(MediaStore.EXTRA_OUTPUT, file2);
            startActivityForResult(intent, 2);
        }
    
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == 1) {
            if (resultCode == RESULT_OK) {
                imageView1.setImageURI(file1);
            }
        } else {
            imageView2.setImageURI(file2);
        }
    }
    
    但是,如果我拍摄第三张照片,它将设置为imageView2…需要纠正这一点


    如果我启动另一个应用而不关闭此应用,当我返回到它时,图像将不再显示在ImageView上。

    如果(…imageView1==null){imageView1.setImageURI(file1);}发布日志。这是打字错误吗?它会以这种方式与NPE崩溃。但这不是你的logcat显示的错误。logcat补充道。Tks!嗨,罗布,不是打字错误。这是我的编码错误。Tks!如果(resultCode==RESULT_OK){imageView1.setImageURI(file1);,我将其更改为此。它现在确实将第一张照片设置为imageView1,但在保存第二张照片时应用程序崩溃。