2014-06-11 54 views
2
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 

這是我得到的異常。當使用Debug配置構建應用程序時,一切正常 - 沒有例外,沒有任何東西。一旦我構建它用於發佈,我就會得到這個異常 - 我無法弄清楚爲什麼,以及如何解決它。System.InvalidCastException - 在調試中工作,在發佈時失敗

這是調用方法CorrectLinkPaths代碼:

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

不用說,_myMessage.Summary和身體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; 
    } 

沒有人有任何線索,爲什麼在調試期間工作的,但是當我嘗試建立發佈,以及如何修復失敗?我會非常,非常感謝!

謝謝:)

此致敬禮。

回答

2

解決方案非常簡單。在方法,導致錯誤

((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; 
} 
0

你應該使用JavaCast,它的工作原理在發佈和調試模式下。你將不得不包含命名空間Android.Runtime。

spanText.JavaCast<ISpannable>().RemoveSpan(s); 
spanText.JavaCast<ISpannable>().SetSpan(urlSpan, start, end, flags); 
相關問題