简体   繁体   English

putParcelableArrayListExtra(ArrayList的 <Uri> 抛出ArrayList无法强制转换为android.os.Parcelable

[英]putParcelableArrayListExtra(ArrayList<Uri>) throws ArrayList cannot be cast to android.os.Parcelable

I want to add multiple images as attachment to an email. 我想添加多个图像作为电子邮件的附件。 Therefore I am trying to add a java.util.ArrayList to an email Intent . 因此,我试图将java.util.ArrayList添加到电子邮件Intent The list contains android.net.Uri elements. 该列表包含android.net.Uri元素。 But it throws a ClassCastException : 但它会抛出ClassCastException

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)

I tried it with different types for the Intent . 我尝试了不同类型的Intent The method I call to create the Intent and start the Activity : 我调用的方法创建Intent并启动Activity

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..."));
}

I couldn't find a solution. 我找不到解决方案。 This did not solve my problem. 并没有解决我的问题。

ACTION_SEND supports EXTRA_STREAM , but only for a single Uri . ACTION_SEND支持EXTRA_STREAM ,但仅适用于单个Uri ACTION_SEND_MULTIPLE supports EXTRA_STREAM with an ArrayList<Uri> . ACTION_SEND_MULTIPLE支持带有ArrayList<Uri> EXTRA_STREAM So, either change the action or change the extra. 因此,要么改变动作,要么改变额外的动作。

Try putting a ArrayList of String s as extra to the Intent and then when getting the extras back from the next Activity , just parse it back into Uri s. 尝试将StringArrayList作为Intent额外内容,然后在从下一个Activity获取额外内容时,只需将其解析回Uri

See this answer 看到这个答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 无法从ArrayList强制转换 <Parcelable> 到ArrayList <ClSprite> - Cannot cast from ArrayList<Parcelable> to ArrayList<ClSprite> 尝试通过Instagram共享打印屏幕时,java.lang.ClassCastException:byte []无法转换为android.os.Parcelable错误 - java.lang.ClassCastException: byte[] cannot be cast to android.os.Parcelable ERROR when trying to share a print screen through Instagram 不可转换类型无法转换ArrayList <Parcelable> 至 - Inconvertable types Cannot Cast ArrayList<Parcelable> to Android - Parcelable | putParcelableArrayListExtra(&quot;ListItems&quot;, listItems); - Android - Parcelable | putParcelableArrayListExtra("ListItems", listItems); android.os.Parcelable android.os.Bundle.getParcelable(java.lang.String)' 在 null ZA8CFDE6331BD59EB666Z66331BD59EB66 - android.os.Parcelable android.os.Bundle.getParcelable(java.lang.String)' on a null object reference HashMap无法强制转换为ArrayList - HashMap cannot be cast to ArrayList ClassCastException:无法将ArrayList强制转换为 - ClassCastException: ArrayList cannot be cast to ArrayList无法强制转换为自定义类扩展ArrayList - ArrayList cannot be cast to custom class extending ArrayList 尝试在 null object 参考上调用虚拟方法 'android.os.Parcelable android.os.Bundle.getParcelable(java.lang.String)' - Attempt to invoke virtual method 'android.os.Parcelable android.os.Bundle.getParcelable(java.lang.String)' on a null object reference 无法从ArrayList强制转换 <Object> 到ArrayList <MyObject> - Cannot cast from ArrayList<Object> to ArrayList<MyObject>
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM