android - System.InvalidCastException - 在调试中有效,在发布时失败

标签 android xamarin xamarin.android

UNHANDLED EXCEPTION: System.InvalidCastException: Cannot cast from source type to destination type.
06-11 19:39:01.690 I/MonoDroid(17577):   at MyApp.Inbox.CorrespondenceActivity.CorrectLinkPaths (ISpanned spanText) [0x00000] in <filename unknown>:0 

这是我遇到的异常(exception)。当使用调试配置构建应用程序时,一切正常 - 没有异常(exception),没有什么。一旦我构建了它以供发布,我就得到了这个异常 - 我不知道为什么,以及如何修复它。

这是调用方法 CorrectLinkPaths 的代码:

_someTextView.SetText(CorrectLinkPaths(Html.FromHtml(_myMessage.Summary + "\n\n" + _myMessage.Body)), TextView.BufferType.Spannable);

不用说,_myMessage.Summary 和 Body 是 HTML 字符串。

我的 CorrectLinkPaths 方法如下所示:

private ISpanned CorrectLinkPaths(ISpanned spanText)
    {
        Object[] spans = spanText.GetSpans(0, spanText.Length(), Class.FromType(typeof (Object)));
        foreach (var s in spans)
        {
            int start = spanText.GetSpanStart(s);
            int end = spanText.GetSpanEnd(s);
            SpanTypes flags = spanText.GetSpanFlags(s);
            if (s.GetType() == typeof (URLSpan))
            {
                var urlSpan = (URLSpan) s;
                if (!urlSpan.URL.StartsWith("http"))
                {
                    if (urlSpan.URL.StartsWith("/"))
                        urlSpan = new URLSpan("http://www.mydomain.com" + urlSpan.URL);
                    else
                        urlSpan = new URLSpan("http://www.mydomain.com/" + urlSpan.URL);
                }
                ((ISpannable) spanText).RemoveSpan(s);
                ((ISpannable) spanText).SetSpan(urlSpan, start, end, flags);
            }
        }
        return spanText;
    }

有谁知道为什么它在调试期间有效,但当我尝试构建发布时失败,以及如何修复它?我将非常非常非常感激!

谢谢:)

致以诚挚的问候。

最佳答案

解决方案相当简单。这是方法底部的转换导致了错误

((ISpannable) spanText).RemoveSpan(s);
((ISpannable) spanText).SetSpan(urlSpan, start, end, flags); 

要解决此问题,必须将方法更改为以下内容:

public ISpanned CorrectLinkPaths(ISpanned spanText)
{
    Object[] spans = spanText.GetSpans(0, spanText.Length(), Class.FromType(typeof (Object)));
    ISpannable spanned = new SpannableString(spanText);
    foreach (var s in spans)
    {
        var start = spanText.GetSpanStart(s);
        var end = spanText.GetSpanEnd(s);
        var flags = spanText.GetSpanFlags(s);

        if (s.GetType() == typeof (URLSpan))
        {
            var urlSpan = (URLSpan)s;
            if (!urlSpan.URL.StartsWith("http"))
            {
                if (urlSpan.URL.StartsWith("/"))
                    urlSpan = new URLSpan("http://www.mydomain.com" + urlSpan.URL);
                else
                    urlSpan = new URLSpan("http://www.mydomain.com/" + urlSpan.URL);
            }
            spanned.RemoveSpan(s);
            spanned.SetSpan(urlSpan, start, end, flags);
        }
    }
    return spanned;
}

关于android - System.InvalidCastException - 在调试中有效,在发布时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24170321/

相关文章:

Android - 如何使用绘画连接两点

带边框的 Xamarin Forms 控件

c# - 如何在 Xamarin.Android 的 try catch block 中捕获所有异常

android - 将 Card.IO 移植到 C# Xamarin Studio

android - 如何使用 HTML5 访问 iPhone 或 Android 相机?

Android - 如何以编程方式设置线性布局中的按钮样式?

c# - xamarin 'System.Object' 未定义或导入

firebase - 为什么我的 Xamarin.iOS 应用程序没有收到来自 Google Firebase 的推送通知?

c# - 适用于 Android 的 ExpandableListView Mono

android - 如何在android中的弹出窗口上实现垂直滚动?