katzer / cordova-plugin-email-composer

Edit and send email messages
Apache License 2.0
344 stars 334 forks source link

Android: ClassCastException on opening Email Chooser #71

Closed mobidev111 closed 9 years ago

mobidev111 commented 9 years ago

Version: 0.8.2 dev

Key android.intent.extra.TEXT expected ArrayList<CharSequence> but value was a java.lang.String.  The default value <null> was returned.
Attempt to cast generated internal exception:
java.lang.ClassCastException: java.lang.String cannot be cast to java.util.ArrayList
    at android.os.Bundle.getCharSequenceArrayList(Bundle.java:1367)
    at android.content.Intent.getCharSequenceArrayListExtra(Intent.java:4736)
    at android.content.Intent.migrateExtraStreamToClipData(Intent.java:7252)
    at android.content.Intent.migrateExtraStreamToClipData(Intent.java:7219)
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1417)
    at android.app.Activity.startActivityForResult(Activity.java:3424)
    at android.app.Activity.startActivityForResult(Activity.java:3385)
    at org.apache.cordova.CordovaActivity.startActivityForResult(CordovaActivity.java:748)
    at de.appplant.cordova.emailcomposer.EmailComposer$2.run(EmailComposer.java:122)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    at java.lang.Thread.run(Thread.java:841)

Add internationalized String to resolve this properly:

Intent.createChooser(sendIntent, getResources().getText(R.string.send_to));
sodoku commented 9 years ago

I have a simular issue:

W/Bundle  (32359): Attempt to cast generated internal exception:
W/Bundle  (32359): java.lang.ClassCastException: android.text.SpannableStringBuilder cannot be cast to java.util.ArrayList
W/Bundle  (32359):  at android.os.BaseBundle.getCharSequenceArrayList(BaseBundle.java:1060)
W/Bundle  (32359):  at android.os.Bundle.getCharSequenceArrayList(Bundle.java:933)
W/Bundle  (32359):  at android.content.Intent.getCharSequenceArrayListExtra(Intent.java:4924)
W/Bundle  (32359):  at android.content.Intent.migrateExtraStreamToClipData(Intent.java:7553)
W/Bundle  (32359):  at android.content.Intent.migrateExtraStreamToClipData(Intent.java:7516)
W/Bundle  (32359):  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1478)
W/Bundle  (32359):  at android.app.Activity.startActivityForResult(Activity.java:3736)
W/Bundle  (32359):  at android.app.Activity.startActivityForResult(Activity.java:3697)
W/Bundle  (32359):  at org.apache.cordova.CordovaActivity.startActivityForResult(CordovaActivity.java:748)
W/Bundle  (32359):  at de.appplant.cordova.emailcomposer.EmailComposer$2.run(EmailComposer.java:122)
W/Bundle  (32359):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/Bundle  (32359):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/Bundle  (32359):  at java.lang.Thread.run(Thread.java:818)

This seems to be a general android problem: https://code.google.com/p/android/issues/detail?id=38303

Can you at least add a try catch, to handle the exception?

mobidev111 commented 9 years ago

@PKnittel Why closed?

The root cause of this issue is still in master:

                cordova.startActivityForResult(
                        plugin, Intent.createChooser(draft, "Select Email App"), 0);
            }

https://github.com/katzer/cordova-plugin-email-composer/blob/master/src/android/EmailComposer.java#L123

katzer commented 9 years ago

hi @mobidev111, @sodoku,

the java.lang.ClassCastException occurs outside of the app when calling startActivityForResult. Its an Android internal exception and catching it isn't possible.