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/