Ich entwickle eine App, in der es eine Schaltfläche gibt, mit der Bilder entweder aus der Galerie oder von der Kamera aufgenommen werden können. Wenn ich ein Bild aus der Galerie wähle, gibt es kein Fehlerbild, das am Ende gut aussieht, aber wenn ich das Bild von meiner Kamera-App aufzeichne, stürzt es ab.Fehler beim Ausgeben des Ergebnisses beim Auswählen eines Bildes aus der Kamera, aber kein Problem beim Auswählen eines Bildes aus der Galerie
Es folgt der Fehler:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=66, result=-1, data=null} to activity
{com.byteshaft.prospectform/com.byteshaft.prospectform.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.net.Uri android.content.Intent.getData()' on a null object reference
at android.app.ActivityThread.deliverResults(ActivityThread.java:4297)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4347)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1557)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:173)
at android.app.ActivityThread.main(ActivityThread.java:6459)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:938)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:828)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.net.Uri android.content.Intent.getData()' on a null object reference
at com.byteshaft.prospectform.MainActivity.onActivityResult(MainActivity.java:400)
at android.app.Activity.dispatchActivityResult(Activity.java:6926)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4293)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4347)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1557)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:173)
at android.app.ActivityThread.main(ActivityThread.java:6459)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:938)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:828)
Mein Code Bild aus der Galerie/Kamera zum Aufnehmen:
public void openImageIntent() {
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String fname = "Prospect-form" + timeStamp;
final File sdImageMainDirectory = new File(storageDir, fname);
outputFileUri = Uri.fromFile(sdImageMainDirectory);
// Camera.
final List<Intent> cameraIntents = new ArrayList<>();
final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
final PackageManager packageManager = getPackageManager();
final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);
for(ResolveInfo res : listCam) {
final String packageName = res.activityInfo.packageName;
final Intent intent = new Intent(captureIntent);
intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
intent.setPackage(packageName);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
cameraIntents.add(intent);
}
//Gallery.
Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
// Filesystem.
final Intent fsIntent = new Intent();
fsIntent.setType("*/*");
fsIntent.setAction(Intent.ACTION_GET_CONTENT);
cameraIntents.add(fsIntent);
//Create the Chooser
final Intent chooserIntent = Intent.createChooser(galleryIntent, "Select Source");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[cameraIntents.size()]));
startActivityForResult(chooserIntent, 66);
}
onActivityResult Code: `
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == Activity.RESULT_OK)
switch (requestCode){
case 5:
Uri selectedImage = data.getData();
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(MainActivity.this.getContentResolver(), selectedImage);
Bitmap resizedBitMap;
resizedBitMap = Bitmap.createScaledBitmap(bitmap, 100, 100, true);
imageView.setImageBitmap(resizedBitMap);
System.out.println(Helpers.getPath(MainActivity.this, selectedImage));
imagePath = Helpers.getPath(MainActivity.this, selectedImage);
} catch (IOException e) {
Log.i("TAG", "Some exception " + e);
}
break;
}
}`
gibt es einige sehr nützliche Antworten auf Stackoverflow, aber ich kann mein Problem nicht lösen m. Nur der Fehler kommt, wenn ich ein Bild von der Kamera nehme, sonst gibt es überhaupt keinen Fehler, wenn ich Bild von der Galerie wähle.
Irgendwelche Vorschläge?
Perfekt! Es hat funktioniert, danke! –