Ich möchte mehrere Bilder als Anhang zu einer E-Mail hinzufügen. Daher versuche ich eine java.util.ArrayList
zu einer E-Mail Intent
hinzuzufügen. Die Liste enthält android.net.Uri
Elemente. Aber es wirft ein ClassCastException
:putParcelableArrayListExtra (ArrayList <Uri>) wirft ArrayList kann nicht in android.os.Parcelable
java.lang.ClassCastException: java.util.ArrayList cannot be cast to android.os.Parcelable
at android.os.Bundle.getParcelable(Bundle.java:792)
at android.content.Intent.getParcelableExtra(Intent.java:5377)
at android.content.Intent.migrateExtraStreamToClipData(Intent.java:8144)
at android.content.Intent.migrateExtraStreamToClipData(Intent.java:8124)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1505)
at android.app.Activity.startActivityForResult(Activity.java:3917)
at android.app.Activity.startActivityForResult(Activity.java:3877)
at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:843)
at android.app.Activity.startActivity(Activity.java:4200)
at android.app.Activity.startActivity(Activity.java:4168)
at de.zinnet.parkingoffenders.ParkingOffendersActivity.sendEmail(ParkingOffendersActivity.java:135)
at de.zinnet.parkingoffenders.ParkingOffendersActivity.onOptionsItemSelected(ParkingOffendersActivity.java:103)
at android.app.Activity.onMenuItemSelected(Activity.java:2908)
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:404)
ich es mit verschiedenen Typen für die Intent
versucht. Verfahren nenne ich die Intent
zu schaffen und die Activity
starten:
private void sendEmail() {
ParkingOffendersListFragment fragment = (ParkingOffendersListFragment) getFragmentManager().findFragmentById(R.id.fragment_list);
Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("text/plain");
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String[] to = {settings.getString(getResources().getString(R.string.key_receiver_mail), "")};
emailIntent .putExtra(Intent.EXTRA_EMAIL, to);
String subject = settings.getString(getResources().getString(R.string.key_subject_mail), "");
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
String text = settings.getString(getResources().getString(R.string.key_template_mail), "");
emailIntent.putExtra(Intent.EXTRA_TEXT, text);
ArrayList<Parcelable> uris = new ArrayList<>();
ParkingOffendersListAdapter adapter = fragment.getAdapter();
for(ParkingOffender parkingOffender : adapter.getSelectedItems()) {
if(parkingOffender.getImageFilePath() != null) {
uris.add(Uri.parse(parkingOffender.getImageFilePath()));
}
}
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
startActivity(Intent.createChooser(emailIntent , "Send email..."));
}
ich finden konnte keine Lösung. This hat mein Problem nicht gelöst.
das Problem mit der Befestigung gelöst. Aber jetzt muss ich eine ArrayList als Text hinzufügen. (emailIntent.putExtra (Intent.EXTRA_TEXT, Text);). Ansonsten bekomme ich dort eine Cast Exception. –
@ R.Schmitt: Denken Sie daran, dass 'ACTION_SEND *' nur * * EXTRA_TEXT' * oder * 'EXTRA_STREAM' zu beachten hat. Darüber hinaus müssen Sie, wenn Sie 'ACTION_SEND_MULTIPLE' verwenden, mehrere von' EXTRA_TEXT' und 'EXTRA_STREAM' senden, da die 'ACTION_SEND_MULTIPLE'-Implementierungen nach den [docs] (http://developer.android.org) suchen. com/Referenz/Android/Inhalt/Intent.html # ACTION_SEND_MULTIPLE). Sie können auch gerne mit der 'setClipData()' Option experimentieren und haben mehrere Elemente in den 'ClipData' mit' ACTION_SEND', aber nur eine Teilmenge der 'ACTION_SEND' Implementierungen wird dies berücksichtigen. – CommonsWare
Danke für die wonderfu Antwort. Send_Multiple hat es geschafft .. :) :) –