android.content.ActivityNotFoundException当链接不包含http时

时间:2014-10-28 20:19:12

标签: android textview

我的应用允许用户在使用有限的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>

如何防止这种情况发生?

1 个答案:

答案 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;链接) - 根据需要进行改进!