85岁欧尼酱 2022-04-30 16:24 采纳率: 38.9%
浏览 21
已结题

关于按钮点击第二次闪退原因

img


问题是app启动之后按钮点击一次就自动闪退了,我该如何解决


package com.example.opencv;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import androidx.appcompat.app.AppCompatActivity;

import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;

import java.io.IOException;

public class deom_1 extends AppCompatActivity {
    private ImageView imageView1,imageView2,imageView3;
    private Button button1;
    private Mat mat1,mat2,result;
    private Bitmap bitmap;

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mat1.release();
        //mat2.release();
        result.release();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initLoadOpenCV();
        imageView1 = findViewById(R.id.imageView1);
        imageView2 = findViewById(R.id.imageView2);
        imageView3 = findViewById(R.id.imageView3);
        button1 = findViewById(R.id.button1);
        mat1 = new Mat();
       // mat2 = new Mat();
        result = new Mat();
        try {
            mat1 = Utils.loadResource(this, R.drawable.gura1);
            //mat2 = Utils.loadResource(this, R.drawable.gura2);
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Imgproc.cvtColor(mat1,result,Imgproc.COLOR_RGB2GRAY);
                Imgproc.threshold(result,mat1,125,255,Imgproc.THRESH_BINARY_INV);
                //Imgproc.adaptiveThreshold(result,mat1,225,Imgproc.ADAPTIVE_THRESH_MEAN_C,Imgproc.THRESH_BINARY,13,5);
                //Core.bitwise_or(mat1,mat2,result);
                bitmap = Bitmap.createBitmap(result.width(),result.height(),Bitmap.Config.ARGB_8888);
                Utils.matToBitmap(mat1,bitmap);
                imageView3.setImageBitmap(bitmap);

            }
        });
    }
    public void initLoadOpenCV() {
        boolean success = OpenCVLoader.initDebug();
        if (success) {
            Log.d("init", "initLoadOpenCV: openCV load success");
        } else {
            Log.e("init", "initLoadOpenCV: openCV load failed");
        }
    }

}
  • 写回答

1条回答 默认 最新

  • 不会写代码的猴子 Android领域优质创作者 2022-04-30 20:48
    关注

    img


    这里应该加一个非空判断,如果bitmap是空,肯定会闪退

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月9日
  • 已采纳回答 5月1日
  • 创建了问题 4月30日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效