App stürzt bei 2. Foto ab

wer112

Top Contributor
Ich versuche das mit dem Foto hinzubekommen. Habe aus SOF eine Helfer Methode genommen, die den Filename rausliest aus der URI. Dieser Name wird danach in der onActivityResult gesetzt.
Leider kann ich nur einmal machen problemlos und dann stürzt die App nach dem 2. Foto ab. Einmal konnte ich zwei machen.

Hier der Code:

Java:
    private void Personal_Vorder_Kamera(){

        if(!checkPermission()){

            ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CAMERA}, Kamera_Code);


        }else if(checkPermission()){
            ContentValues values = new ContentValues();
            values.put(MediaStore.Images.Media.TITLE, "Personalausweiß Vorderseite");
            values.put(MediaStore.Images.Media.DESCRIPTION, "Für die Bestätigung der Person.");

            persovorURI = getActivity().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

            Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            camera.putExtra(MediaStore.EXTRA_OUTPUT, persovorURI);

            try {
                persoVorBitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), persovorURI);
            } catch (IOException e) {
                e.printStackTrace();
            }

            startActivityForResult(camera, PersonalVorResult);         }

    }

    private void Personal_Rück_Kamera(){

        if(!checkPermission()){

            ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CAMERA}, Kamera_Code);


        }else if(checkPermission()){
            ContentValues values = new ContentValues();
            values.put(MediaStore.Images.Media.TITLE, "Personalausweiß Rückseite");
            values.put(MediaStore.Images.Media.DESCRIPTION, "Für die Bestätigung der Person.");

            persorückURI = getActivity().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

            Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            camera.putExtra(MediaStore.EXTRA_OUTPUT, persorückURI);

            try {
                persoRückBitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), persorückURI);
            } catch (IOException e) {
                e.printStackTrace();
            }

            startActivityForResult(camera, PersonalRückResult);        }


    }

    private void Gewerbe_Kamera(){

        if(!checkPermission()){

            ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CAMERA}, Kamera_Code);

        }else if(checkPermission()){
            ContentValues values = new ContentValues();
            values.put(MediaStore.Images.Media.TITLE, "Gewerbeschein");
            values.put(MediaStore.Images.Media.DESCRIPTION, "Für die Bestätigung des Unternehmens.");

            gewerbescheinURI = getActivity().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

            Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            camera.putExtra(MediaStore.EXTRA_OUTPUT, gewerbescheinURI);

            try {
                gewerbescheinBitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), gewerbescheinURI);
            } catch (IOException e) {
                e.printStackTrace();
            }

            startActivityForResult(camera, GewerbeResult);
        }





    }

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

        if (requestCode == GewerbeResult){

            if(resultCode == RESULT_OK){
                String path = getRealPathFromURI(gewerbescheinURI);
                filenameGewerbe = path.substring(path.lastIndexOf("/")+1);
                gewerbe_filename.setText(filenameGewerbe);

            }else{
                Toast.makeText(getActivity(), "Kein Foto gemacht", Toast.LENGTH_SHORT).show();
            }

        }else if (requestCode == PersonalVorResult){

            String path = getRealPathFromURI(persovorURI);
            filenamePersoVorder = path.substring(path.lastIndexOf("/")+1);
            persovor_filename.setText(filenamePersoVorder);


        }else if(requestCode == PersonalRückResult){

            if(resultCode == RESULT_OK){

                String path = getRealPathFromURI(persorückURI);
                filenamePersoRück = path.substring(path.lastIndexOf("/")+1);
                perosrück_filename.setText(filenamePersoRück);

            }else{
                Toast.makeText(getActivity(), "Kein Foto gemacht", Toast.LENGTH_SHORT).show();
            }
        }
    }

    private String getRealPathFromURI(Uri contentUri) {

        // can post image
        String [] proj={MediaStore.Images.Media.DATA};
        Cursor cursor = getActivity().managedQuery( contentUri,
                proj, // Which columns to return
                null,       // WHERE clause; which rows to return (all rows)
                null,       // WHERE clause selection arguments (none)
                null); // Order-by clause (ascending by name)
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();

        String res = cursor.getString(column_index);
        cursor.close();

        return res;
    }

    private Boolean checkPermission(){

        int permission = ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA);

        return permission == PackageManager.PERMISSION_GRANTED;
    }



    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == Kamera_Code) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(getActivity(), "camera permission granted", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(getActivity(), "camera permission denied", Toast.LENGTH_LONG).show();
            }
        }
    }

und das mit dem Registrations Teil:

Java:
        if (filenamePersoVorder == ""){
            p_v.setError("Bitte machen Sie ein Foto");
            p_v.requestFocus();

            correctFilledOut = false;

        }else{
            p_v.setError(null);
        }




        if (filenamePersoRück == ""){
            p_r.setError("Bitte machen Sie ein Foto");
            p_r.requestFocus();

            correctFilledOut = false;

        }else{
            p_r.setError(null);
        }

Die Deklaration:

Java:
        persovor_filename = (TextView)view.findViewById(R.id.dev_free_dokumente_privat_peronalausweiß_vorderseite_TextView);
        perosrück_filename = (TextView)view.findViewById(R.id.dev_free_dokumente_privat_peronalausweiß_rückseite_TextView);


Der Abbruch Fehler:

Code:
android.database.StaleDataException: Attempted to access a cursor after it has been closed.
                                                                                                        at android.database.BulkCursorToCursorAdaptor.throwIfCursorIsClosed(BulkCursorToCursorAdaptor.java:63)
                                                                                                        at android.database.BulkCursorToCursorAdaptor.requery(BulkCursorToCursorAdaptor.java:132)
                                                                                                        at android.database.CursorWrapper.requery(CursorWrapper.java:232)
                                                                                                        at android.app.Activity.performRestart(Activity.java:8384)
                                                                                                        at android.app.ActivityThread.performRestartActivity(ActivityThread.java:5866)
                                                                                                        at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:244)
                                                                                                        at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
                                                                                                        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
                                                                                                        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
                                                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2443)
                                                                                                        at android.os.Handler.dispatchMessage(Handler.java:106)
                                                                                                        at android.os.Looper.loopOnce(Looper.java:226)
                                                                                                        at android.os.Looper.loop(Looper.java:313)
                                                                                                        at android.app.ActivityThread.main(ActivityThread.java:8751)
                                                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                                                        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
                                                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)

Leider konnte ich aus dem level:error nicht schlau werden, da die keine Zeile makiert haben.

Wer kennt sich mit dem Prozess au?

Für jede Hilfe bin ich dankbar!
 
Java:
}else if (requestCode == PersonalVorResult){

            String path = getRealPathFromURI(persovorURI);
            filenamePersoVorder = path.substring(path.lastIndexOf("/")+1);
            persovor_filename.setText(filenamePersoVorder);


// hier hast du das OK zb nicht abgefragt.
// ich würde hier vielleicht ein switch benutzen.

und "managedQuery" ist seit API 15 Deprecated

 
Java:
}else if (requestCode == PersonalVorResult){

            String path = getRealPathFromURI(persovorURI);
            filenamePersoVorder = path.substring(path.lastIndexOf("/")+1);
            persovor_filename.setText(filenamePersoVorder);


// hier hast du das OK zb nicht abgefragt.
// ich würde hier vielleicht ein switch benutzen.
Habe ich selber grade festgestellt, trotzdem Danke
und "managedQuery" ist seit API 15 Deprecated

Habe es wie SOF gemacht und habe den Satz genommen: Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);

Es geht nun, bisher. Hoffentlich auch mit Android in eine Niedrigen API

Danke.
 

Zurück
Oben