【问题标题】:How to make sure Uri.parse() always returns valid values in java/android?如何确保 Uri.parse() 始终在 java/android 中返回有效值?
【发布时间】:2013-12-26 02:34:33
【问题描述】:

在java中(在android中很好,但我认为这是一个普遍的问题),

我这样做

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("www.google.ca"));
startActivity(browserIntent);

但随后它崩溃了。然后我尝试了这个:

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.ca"));
startActivity(browserIntent);

这很奏效。似乎添加http:// 使其工作。

链接是客户输入的内容,因此无法保证他们输入的内容有效。有没有办法修复链接,以确保它可以在 Uri.parse() 上工作,所以它适用于所有情况?如果它无效,那么我应该能够检测到它。

谢谢

【问题讨论】:

    标签: java android http url uri


    【解决方案1】:

    检查字符串中的“http://”或“https://”,如果找到,请将其传递为 URI 或附加在开头。

    检查:

    str1.toLowerCase().contains(str2.toLowerCase())
    

    追加:

    str3 = "htttp://"+str2
    

    【讨论】:

      【解决方案2】:

      是的,你不能确定你得到了什么输入。所以我认为你可以用正则表达式模式检查它。 我认为这种模式有效。

      Pattern pattern=Pattern.compile("^(http|https)://[a-z|A-z]{1,}.[a-z|A-Z]{1,}.[a-z|A-Z]{2,}$");
      

      这将导致一个可以被解析的url。 但是对于大多数人来说,他们倾向于输入类似 www.xxx.com 的内容,所以我建议使用以下模式再次检查之前的模式是否不匹配

      Pattern pattern=Pattern.compile("^[a-z|A-z]{1,}.[a-z|A-Z]{1,}.[a-z|A-Z]{2,}$");
      

      并在网址开头添加http://

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-23
        • 2014-01-28
        • 2023-03-10
        相关资源
        最近更新 更多