I'm working on an app with java and the app should open the camera when i press on a button. when i launch the app it opens normally but when i press on the button it crashes and re open form the begin. i couldn't find any errors in my code so idon't know where is the problem. if any one could help me i will be very greatful, thanks here is the camera activity code:
package com.example.imagepro;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceView;
import android.view.Window;
import android.view.WindowManager;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import java.io.IOException;
public class CameraActivity extends Activity implements
CameraBridgeViewBase.CvCameraViewListener2{
private static final String TAG="MainActivity";
private Mat mRgba;
private Mat mGray;
private CameraBridgeViewBase mOpenCvCameraView;
private imageClassification imageClassification;
private BaseLoaderCallback mLoaderCallback =new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status){
case LoaderCallbackInterface
.SUCCESS:{
Log.i(TAG,"OpenCv Is loaded");
mOpenCvCameraView.enableView();
}
default:
{
super.onManagerConnected(status);
}
break;
}
}
};
public CameraActivity(){
Log.i(TAG,"Instantiated new "+this.getClass());
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
int MY_PERMISSIONS_REQUEST_CAMERA=0;
// if camera permission is not given it will ask for it on device
if (ContextCompat.checkSelfPermission(CameraActivity.this, Manifest.permission.CAMERA)
== PackageManager.PERMISSION_DENIED){
ActivityCompat.requestPermissions(CameraActivity.this, new String[] {Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA);
}
setContentView(R.layout.activity_camera);
mOpenCvCameraView=(CameraBridgeViewBase) findViewById(R.id.frame_surface);
mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
mOpenCvCameraView.setCvCameraViewListener(this);
try {
int inputSize=256;
imageClassification=new imageClassification(getAssets(),"model.tflite",inputSize);
Log.d("CameraActivity","Model is loaded");
}
catch (IOException e){
e.printStackTrace();
}
}
@Override
protected void onResume() {
super.onResume();
if (OpenCVLoader.initDebug()){
//if load success
Log.d(TAG,"Opencv initialization is done");
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
else{
//if not loaded
Log.d(TAG,"Opencv is not loaded. try again");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_4_0,this,mLoaderCallback);
}
}
@Override
protected void onPause() {
super.onPause();
if (mOpenCvCameraView !=null){
mOpenCvCameraView.disableView();
}
}
public void onDestroy(){
super.onDestroy();
if(mOpenCvCameraView !=null){
mOpenCvCameraView.disableView();
}
}
public void onCameraViewStarted(int width ,int height){
mRgba=new Mat(height,width, CvType.CV_8UC4);
mGray =new Mat(height,width,CvType.CV_8UC1);
}
public void onCameraViewStopped(){
mRgba.release();
}
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame){
mRgba=inputFrame.rgba();
mGray=inputFrame.gray();
// now call that function
mRgba=imageClassification.recognizeImage(mRgba);
return mRgba;
}
} ' and here is the error i have:
E/AndroidRuntime: FATAL EXCEPTION: Thread-6 Process: com.example.imagepro, PID: 27361 java.lang.NullPointerException: Attempt to invoke virtual method 'org.opencv.core.Mat com.example.imagepro.imageClassification.recognizeImage(org.opencv.core.Mat)' on a null object reference at com.example.imagepro.CameraActivity.onCameraFrame(CameraActivity.java:128) at org.opencv.android.CameraBridgeViewBase.deliverAndDrawFrame(CameraBridgeViewBase.java:391) at org.opencv.android.JavaCameraView$CameraWorker.run(JavaCameraView.java:373) at java.lang.Thread.run(Thread.java:784)