我的应用允许用户在使用有限的HTML时向其他用户键入消息。我允许的一件事是使用超链接。
示例:
<a href="www.google.com">Google</a>
我通过以下方法填充TextView
:
txtview.setMovementMethod(LinkMovementMethod.getInstance());
txtview.setText(Html.fromHtml(items.get(position).getBody()));
如果用户创建的超链接没有前缀http
到网址,则应用程序崩溃时会出现以下异常:
FATAL EXCEPTION: main
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=www.google.com (has extras) }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1545)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1416)
如果网址以http
为前缀,则一切正常。
示例:
<a href="http://www.google.com">Google</a>
如何防止这种情况发生?
答案 0 :(得分:8)
问题在于Html.fromHtml()
为嵌入式网址创建URLSpan
个实例,而这个类&#34;盲目地&#34;使用提供的网址调用startActivity()
。只要URL与任何已注册的活动不匹配,就会崩溃。
问题在this CommonsWare post中得到了很好的解释。其中的解决方案/示例将覆盖onClick()
并处理ActivityNotFoundException
以防止崩溃。
如果你想做的是对链接更加宽容,你可以改为覆盖getURL()
,例如如下:
@Override
public String getURL()
{
String url = super.getURL();
if (!url.toLowerCase().startsWith("http"))
url = "http://" + url;
return url;
}
请注意,这是非常原始示例(例如,它不会考虑&#34; https&#34;链接) - 根据需要进行改进!