如何检查 URL 在 Android 中是不是有效
Posted
技术标签:
【中文标题】如何检查 URL 在 Android 中是不是有效【英文标题】:How to check if URL is valid in Android如何检查 URL 在 Android 中是否有效 【发布时间】:2011-06-21 18:18:10 【问题描述】:是否有避免导致应用程序崩溃的“主机未解析”错误的好方法?某种方式尝试连接到主机(如 URL)并查看它是否有效?
【问题讨论】:
你是如何连接到主机的? 【参考方案1】:我会结合使用此处和其他 *** 线程中提到的方法:
public static boolean IsValidUrl(String urlString)
try
URL url = new URL(urlString);
return URLUtil.isValidUrl(urlString) && Patterns.WEB_URL.matcher(urlString).matches();
catch (MalformedURLException ignored)
return false;
【讨论】:
【参考方案2】:只需添加这行代码:
Boolean isValid = URLUtil.isValidUrl(url) && Patterns.WEB_URL.matcher(url).matches();
【讨论】:
【参考方案3】:URLUtil.isValidUrl(url);
如果这不起作用,您可以使用:
Patterns.WEB_URL.matcher(url).matches();
【讨论】:
这不只是检查模式而不是 URL 是否实际处于活动状态吗? 据我所知,如果我们需要检查 url 是否真的在 ping,我们应该使用 HttpURLConnection 类手动检查。 如果您需要检查没有架构的 url,请使用第二个选项。如果未添加架构,URLUtil.isValidUrl 将返回 false。【参考方案4】:public static boolean isURL(String text)
String tempString = text;
if (!text.startsWith("http"))
tempString = "https://" + tempString;
try
new URL(tempString).toURI();
return Patterns.WEB_URL.matcher(tempString).matches();
catch (MalformedURLException | URISyntaxException e)
e.printStackTrace();
return false;
这是我正在使用的正确解决方案。在原始文本之前添加https://
可以防止将诸如“www.cats.com”之类的文本视为URL
。如果new URL()
成功,那么如果您只是检查模式以排除像“https://cats”这样的简单文本被视为URL
。
【讨论】:
【参考方案5】:您可以通过以下方式验证 URL:
Patterns.WEB_URL.matcher(potentialUrl).matches()
【讨论】:
【参考方案6】:new java.net.URL(String) throws MalformedURLException
【讨论】:
【参考方案7】:如果您使用的是 kotlin
,您可以创建一个 String.kt
并编写以下代码:
fun String.isValidUrl(): Boolean = Patterns.WEB_URL.matcher(this).matches()
然后:
String url = "www.yourUrl.com"
if (!url.isValidUrl())
//some code
else
//some code
【讨论】:
【参考方案8】:在我输入类似于“first.secondword”的String
(我的应用程序检查用户输入)的情况下,Patterns.WEB_URL.matcher(url).matches()
无法正常工作。此方法返回 true。
URLUtil.isValidUrl(url)
对我来说可以正常工作。也许它对其他人有用
【讨论】:
【参考方案9】:import okhttp3.HttpUrl;
import android.util.Patterns;
import android.webkit.URLUtil;
if (!Patterns.WEB_URL.matcher(url).matches())
error.setText(R.string.wrong_server_address);
return;
if (HttpUrl.parse(url) == null)
error.setText(R.string.wrong_server_address);
return;
if (!URLUtil.isValidUrl(url))
error.setText(R.string.wrong_server_address);
return;
if (!url.substring(0,7).contains("http://") & !url.substring(0,8).contains("https://"))
error.setText(R.string.wrong_server_address);
return;
【讨论】:
【参考方案10】:我尝试了很多方法。发现没有人能很好地使用this URL:
现在我使用以下,一切顺利。
public static boolean checkURL(CharSequence input)
if (TextUtils.isEmpty(input))
return false;
Pattern URL_PATTERN = Patterns.WEB_URL;
boolean isURL = URL_PATTERN.matcher(input).matches();
if (!isURL)
String urlString = input + "";
if (URLUtil.isNetworkUrl(urlString))
try
new URL(urlString);
isURL = true;
catch (Exception e)
return isURL;
【讨论】:
【参考方案11】:使用 URLUtil 来验证 URL,如下所示。
URLUtil.isValidUrl(url)
如果 URL 有效则返回 True,如果 URL 无效则返回 false。
【讨论】:
isValidUrl 为以下 URL 返回 false,尽管设备似乎对此很满意(它缺少文件后的双斜杠:)。 “文件:/storage/emulated/0/Android/data/com.samsung.android.app.pinboard/files/ClipData/Screenshot_NormarAppImage.png” 我不会依赖这种方法,因为它不执行深度验证,只执行最简单的 WebView 案例。见source 更好的答案:***.com/questions/5617749/… 好像只要有http://
或者https://
都会返回true
这是否有助于避免使用诸如 mailto: abc@xyz.com 和 about:blank#blocked 之类的网址【参考方案12】:
将操作包装在 try/catch 中。有很多方法可以使 URL 格式正确但不可检索。此外,诸如查看主机名是否存在之类的测试并不能保证任何事情,因为主机可能会在检查后变得无法访问。基本上,再多的预检查也无法保证检索不会失败并抛出异常,因此您最好计划处理异常。
【讨论】:
我不介意处理异常,但是如何防止应用程序由于该异常而崩溃? @kidalex Err,catch 异常? else“处理异常”可能意味着什么?以上是关于如何检查 URL 在 Android 中是不是有效的主要内容,如果未能解决你的问题,请参考以下文章
如何检查在 iOS 的 url 中发布的用户名和密码是不是有效
在 ServletRequests 上使用 java Filter 时如何检查 url 是不是具有有效映射