Warum erhalte ich ein "IllegalArgumentException" zur Laufzeit ?

  • 1 Antworten
  • Neuester Beitrag
Diskutiere Warum erhalte ich ein "IllegalArgumentException" zur Laufzeit ? im Android App Entwicklung im Bereich Betriebssysteme & Apps.
A

AndroidJuengling

Neues Mitglied
Hallo, ich bin neu in der Programmierwelt und wollte eine App erstellen, mit der man ein Foto aufnehmen und dann in einer ImageView anzeigen lassen kann. Die benötigten Methoden habe ich von android.developers entnommen, daher sollten sie eigentlich nicht falsch sein. Dennoch wirft meine App eine IllegalArgumentException. Ich komme auch nach langem googeln nicht weiter, könnte mir da evtl. jemand von euch weiterhelfen?

Java:
public class FotoActivity extends Activity {

    private Button aufnehmen;
    static final int REQUEST_IMAGE_CAPTURE = 1;
    static final int REQUEST_TAKE_PHOTO = 2;
    private ImageView mImageView;
    String mCurrentPhotoPath;

    private void dispatchTakePictureIntent() {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        // Ensure that there's a camera activity to handle the intent
        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            // Create the File where the photo should go
            File photoFile = null;
            try {
                photoFile = createImageFile();
            } catch (IOException ex) {
                // Error occurred while creating the File

            }
            // Continue only if the File was successfully created
            if (photoFile != null) {
                Uri photoURI = FileProvider.getUriForFile(this,
                        "com.example.android.fileprovider",
                        photoFile);
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
                startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
            }
        }
    }

    private File createImageFile() throws IOException {
        // Create an image file name
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String imageFileName = "JPEG_" + timeStamp + "_";
        File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        File image = File.createTempFile(
                imageFileName,  /* prefix */
                ".jpg",         /* suffix */
                storageDir      /* directory */
        );

        // Save a file: path for use with ACTION_VIEW intents
        mCurrentPhotoPath = image.getAbsolutePath();
        return image;
    }

    private void setPic() {
        // Get the dimensions of the View
        int targetW = mImageView.getWidth();
        int targetH = mImageView.getHeight();

        // Get the dimensions of the bitmap
        BitmapFactory.Options bmOptions = new BitmapFactory.Options();
        bmOptions.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
        int photoW = bmOptions.outWidth;
        int photoH = bmOptions.outHeight;

        // Determine how much to scale down the image
        int scaleFactor = Math.min(photoW/targetW, photoH/targetH);

        // Decode the image file into a Bitmap sized to fill the View
        bmOptions.inJustDecodeBounds = false;
        bmOptions.inSampleSize = scaleFactor;


        Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
        mImageView.setImageBitmap(bitmap);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
            Bundle extras = data.getExtras();
            Bitmap imageBitmap = (Bitmap) extras.get("data");
            mImageView.setImageBitmap(imageBitmap);
        }
    }

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_foto);

        aufnehmen = (Button) findViewById(R.id.btnAufnehmen);
        aufnehmen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                //startActivity(intent);

                dispatchTakePictureIntent();
            }
        });

        mImageView = (ImageView) findViewById(R.id.ivFoto);

    }




    }
Fehler:

Code:
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.lukasgehring.spots, PID: 6694
                  java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/emulated/0/Android/data/com.lukasgehring.spots/files/Pictures/JPEG_20170202_174249_1846595247.jpg
                      at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:711)
                      at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:400)
                      at com.lukasgehring.spots.FotoActivity.dispatchTakePictureIntent(FotoActivity.java:47)
                      at com.lukasgehring.spots.FotoActivity.access$000(FotoActivity.java:25)
                      at com.lukasgehring.spots.FotoActivity$1.onClick(FotoActivity.java:116)
                      at android.view.View.performClick(View.java:5610)
                      at android.view.View$PerformClick.run(View.java:22265)
                      at android.os.Handler.handleCallback(Handler.java:751)
                      at android.os.Handler.dispatchMessage(Handler.java:95)
                      at android.os.Looper.loop(Looper.java:154)
                      at android.app.ActivityThread.main(ActivityThread.java:6077)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Application terminated.
Die Anpassungen in der Manifest-Datei wurden nicht vergessen, ebenso habe ich file_paths.xml erstellt
 
swa00

swa00

Moderator
Teammitglied
Hallo an dich ,,

deine Fehlermeldung sagt eigentlich recht deutlich aus , wo das Problem ist

in Zeile 711
Failed to find configured root that contains /storage/emulated/0/Android/data/com.lukasgehring.spots/files/Pictures/JPEG_20170202_174249_1846595247.jpg

Deine Foto-Datei resp, Folder gibt es nicht ...

NACHTRAG
Bitte achte in Zukunft drauf, dass deine Titel aussagekräftig sind , damit auch jeder hier im Forum
sofort erkennen kann , was du erfragen möchtest und die weiteren Bitten

[LEITFADEN] Wie bekomme ich die effektivste Hilfe ?

Ich habe nun deinen Titel für den Anfang meinerseits geändert. : Lediglich nur "IllegalArgumentExcpetion" ist sehr dürftig
Danke
 
Zuletzt bearbeitet: