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!
 

Jw456

Top Contributor
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

 

wer112

Top Contributor
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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K App stürzt ab Android & Cross-Platform Mobile Apps 29
I Android Auf ImageView aus einem anderen Thread zugreifen liefert Fehlermeldung (App stürzt ab) Android & Cross-Platform Mobile Apps 5
O Google Admob Ad wird nicht geladen und App stürzt ab Android & Cross-Platform Mobile Apps 1
L App stürzt ab. Android & Cross-Platform Mobile Apps 2
T Android Eigene App stürzt ab Android & Cross-Platform Mobile Apps 3
J Android App stürzt ab wenn neue activity gestartet Android & Cross-Platform Mobile Apps 6
B Android GameLoopThread stürzt beim 2ten start der App ab? Android & Cross-Platform Mobile Apps 4
W getSystemService(SENSOR_SERVICE) - App stürzt ab Android & Cross-Platform Mobile Apps 5
E Android App stürzt nach Modifizierung ab Android & Cross-Platform Mobile Apps 2
P Android Programm stürzt ab - Es geht um Netzwerk Android & Cross-Platform Mobile Apps 5
J MIDlet installieren - Telefon stürzt ab! Android & Cross-Platform Mobile Apps 3
W Foto machen und es direkt per URI speichern und auswählen Android & Cross-Platform Mobile Apps 4
I Foto mit einer bestimmten Auflösung aufnehmen und als Datei ablegen. Android & Cross-Platform Mobile Apps 5
J Kamera - Foto wird nicht gespeichert Android & Cross-Platform Mobile Apps 2
S Foto-app hält galerie nicht aktuell Android & Cross-Platform Mobile Apps 9
S Android Geschossenes Foto in anderem Ordner speichern Android & Cross-Platform Mobile Apps 11
S Foto aufnehmen Android & Cross-Platform Mobile Apps 5

Ähnliche Java Themen

Neue Themen


Oben