【问题标题】:try to save in internal bitmap picture尝试保存在内部位图图片中
【发布时间】:2019-02-09 22:02:45
【问题描述】:

该应用程序是当会员单击 btn 相机打开并拍照并在图像视图中查看它时。当他关闭应用程序时,图片需要保存在内部存储中。 问题是当我点击 btn 并在我拍照后点击 V 时应用程序崩溃/

package com.e.test;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.provider.MediaStore;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {

全局变量:

    final int CAMERA_REQUEST = 1;
    ImageView imageview;
    Bitmap bitmap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

这是加载图片:

        try {
            FileInputStream fis = openFileInput("pictures");
            bitmap = BitmapFactory.decodeStream(fis);
            imageview.setImageBitmap(bitmap);
            fis.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        Button btn = findViewById(R.id.btn);
        imageview = findViewById(R.id.image_result);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(intent,CAMERA_REQUEST);

            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == CAMERA_REQUEST && resultCode == RESULT_OK)
        {
            bitmap = (Bitmap)data.getExtras().get("data");
            imageview.setImageBitmap(bitmap);
        }
    }

这是存档:

    @Override
    protected void onPause() {
        super.onPause();
        try {
            FileOutputStream fos = openFileOutput("pictures",MODE_PRIVATE);
            bitmap.compress(Bitmap.CompressFormat.JPEG,50,fos);
            fos.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

【问题讨论】:

  • 你是什么意思`问题是当我点击btn并在我拍照后点击V应用程序是crash? what is V`?另外,你能分享一下logcat的崩溃日志吗?这将有助于找到原因。
  • java.lang.RuntimeException:无法暂停活动 {com.e.test/com.e.test.MainActivity}:java.lang.NullPointerException:尝试调用虚拟方法 'boolean android.graphics .Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.OutputStream)' 在 android.app.ActivityThread.performPauseActivityIfNeeded 的空对象引用上
  • 我的意思是在我拍照后应用程序崩溃了
  • 可以分享完整的活动代码
  • 你在上面看到它

标签: java android android-studio


【解决方案1】:

NullPointerException 出现是因为您的 bitmap 实例为空。不确定您是如何使用此代码的,但您可以添加一个空检查以确保 bitmap 在您对其执行操作(例如压缩它)时不为空。这样你的应用程序就不会崩溃。像这样:

@Override
protected void onPause() {
    super.onPause();
    try {
        if(bitmap != null){
            FileOutputStream fos = openFileOutput("pictures",MODE_PRIVATE);
            bitmap.compress(Bitmap.CompressFormat.JPEG,50,fos);
            fos.close();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

【讨论】:

  • 但是如果我这样做了,它就不会进入 if 语句,因为位图是空的,我如何做到位图不为空?也许声明 bitmap = " ";还是什么??
  • 你不能这样做:bitmap = " "。您不能完全确保 Bitmap 不为空。您必须检查可空性。
猜你喜欢
  • 1970-01-01
  • 2013-03-17
  • 2013-03-17
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多