java.lang.ClassCastException: android.text.SpannableStringBuilder无法转换为java.util.ArrayList

12

我正在使用PhoneGap Android插件:EmailComposerwithAttachmentshttps://github.com/phonegap/phonegap-plugins/tree/master/Android/EmailComposerWithAttachments,当执行startActivitywithResult函数时出现以下错误。我正在使用Android 4.2和Cordova 2.5.0。

java.lang.ClassCastException: android.text.SpannableStringBuilder无法转换为java.util.ArrayList

// setting attachments
    try {
        JSONArray attachments = parameters.getJSONArray("attachments");
        if (attachments != null && attachments.length() > 0) {
            ArrayList<Uri> uris = new ArrayList<Uri>();
            //convert from paths to Android friendly Parcelable Uri's
            for (int i=0; i<attachments.length(); i++) {
                try {
                    File file = new File(attachments.getString(i));
                    if (file.exists()) {
                        Uri uri = Uri.fromFile(file);
                        uris.add(uri);
                    }
                } catch (Exception e) {
                    LOG.e("EmailComposer", "Error adding an attachment: " + e.toString());
                }
            }
            if (uris.size() > 0) {
                emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
            }
        }
    } catch (Exception e) {
        LOG.e("EmailComposer", "Error handling attachments param: " + e.toString());
    }

    this.cordova.startActivityForResult(this, emailIntent, 0);
以下是完整的跟踪信息。
04-02 16:34:13.120: W/Bundle(698): Key android.intent.extra.TEXT expected ArrayList<CharSequence> but value was a android.text.SpannableStringBuilder.  The default value <null> was returned.

04-02 16:34:13.150: W/Bundle(698): Attempt to cast generated internal exception:

04-02 16:34:13.150: W/Bundle(698): java.lang.ClassCastException: 
android.text.SpannableStringBuilder cannot be cast to java.util.ArrayList

04-02 16:34:13.150: W/Bundle(698):  at android.os.Bundle.getCharSequenceArrayList(Bundle.java:1326)

04-02 16:34:13.150: W/Bundle(698):  at android.content.Intent.getCharSequenceArrayListExtra(Intent.java:4224)

04-02 16:34:13.150: W/Bundle(698):  at android.content.Intent.migrateExtraStreamToClipData(Intent.java:6682)

04-02 16:34:13.150: W/Bundle(698):  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1410)

04-02 16:34:13.150: W/Bundle(698):  at android.app.Activity.startActivityForResult(Activity.java:3351)

04-02 16:34:13.150: W/Bundle(698):  at android.app.Activity.startActivityForResult(Activity.java:3312)

04-02 16:34:13.150: W/Bundle(698):  at org.apache.cordova.DroidGap.startActivityForResult(DroidGap.java:812)

04-02 16:34:13.150: W/Bundle(698):  at org.apache.cordova.example.EmailComposer.sendEmail(EmailComposer.java:157)

04-02 16:34:13.150: W/Bundle(698):  at org.apache.cordova.example.EmailComposer.execute(EmailComposer.java:36)

04-02 16:34:13.150: W/Bundle(698):  at org.apache.cordova.api.CordovaPlugin.execute(CordovaPlugin.java:61)

04-02 16:34:13.150: W/Bundle(698):  at org.apache.cordova.api.PluginManager.exec(PluginManager.java:220)

04-02 16:34:13.150: W/Bundle(698):  at org.apache.cordova.ExposedJsApi.exec(ExposedJsApi.java:44)

04-02 16:34:13.150: W/Bundle(698):  at android.webkit.WebViewCore.nativeMouseClick(Native Method)

04-02 16:34:13.150: W/Bundle(698):  at android.webkit.WebViewCore.nativeMouseClick(Native Method)

04-02 16:34:13.150: W/Bundle(698):  at android.webkit.WebViewCore.access$6800(WebViewCore.java:57)

04-02 16:34:13.150: W/Bundle(698):  at android.webkit.WebViewCore$EventHub.dispatchWebKitEvent(WebViewCore.java:1806)

04-02 16:34:13.150: W/Bundle(698):  at android.webkit.WebViewInputDispatcher.dispatchWebKitEvent(WebViewInputDispatcher.java:689)

04-02 16:34:13.150: W/Bundle(698):  at android.webkit.WebViewInputDispatcher.dispatchWebKitEvents(WebViewInputDispatcher.java:639)

04-02 16:34:13.150: W/Bundle(698):  at android.webkit.WebViewInputDispatcher.access$800(WebViewInputDispatcher.java:78)

04-02 16:34:13.150: W/Bundle(698):  at android.webkit.WebViewInputDispatcher$WebKitHandler.handleMessage(WebViewInputDispatcher.java:1153)

04-02 16:34:13.150: W/Bundle(698):  at android.os.Handler.dispatchMessage(Handler.java:99)

04-02 16:34:13.150: W/Bundle(698):  at android.os.Looper.loop(Looper.java:137)

04-02 16:34:13.150: W/Bundle(698):  at android.webkit.WebViewCore$WebCoreThread.run(WebViewCore.java:827)

04-02 16:34:13.150: W/Bundle(698):  at java.lang.Thread.run(Thread.java:856)

有些东西告诉我你没有展示代码的相关部分。你在任何地方设置了TEXT额外参数吗? - yarian
yarian,我直接从https://github.com/phonegap/phonegap-plugins/tree/master/Android/EmailComposerWithAttachments获取了未经修改的代码。 - Yang
你能加上你传递的参数吗? - yarian
我也遇到了同样的问题,有人知道解决方案吗? - Ineze
你解决了这个问题吗?我遇到了同样的问题。你能建议一些解决方法吗? - surhidamatya
显示剩余2条评论
2个回答

7

这是关于it技术的内容,需要翻译成中文。以下是需要翻译的内容:

Android 4.x存在这个bug

你可以通过替换EmailComposer.java中的这行代码来解决普通文本邮件的问题:

emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, body);

使用

ArrayList<String> extra_text = new ArrayList<String>();
extra_text.add(body);
emailIntent.putStringArrayListExtra(android.content.Intent.EXTRA_TEXT, extra_text);

但是这个方法在HTML邮件中不起作用,因为Spanned(由Html.fromHtml返回)不是CharSequence的子类。当我尝试将Html.fromHtml()的结果转换为字符串时,标签出现在文本的一部分中:-(
另外,当我尝试这样做时,纯文本电子邮件的正文出现在 Gmail 应用程序中,但在股票电子邮件应用程序中没有出现 - 正文始终为空白。

嗨,我在邮件附件方面遇到了同样的问题,你能否给一些建议? - surhidamatya
11
使用putStringArrayListExtra()方法时,与ArrayList一起使用的注意事项是,虽然ClassCastException错误已经消除,但是在我的Nexus 4 API 19和HTC Evo API 16设备上,Gmail应用程序的正文中没有出现文本。使用常规的putExtra()方法会导致异常,但至少正文文本会出现。(副注:我使用的是原生的Android系统,而非PhoneGap。) - Anonsage

0

尝试一种不同的方法:

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:" + email));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, body);
//emailIntent.putExtra(Intent.EXTRA_HTML_TEXT, body); //If you are using HTML in your body text

startActivity(Intent.createChooser(emailIntent, "Chooser Title"));

从这里获取:发送电子邮件意图


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接