2010-08-15 79 views

回答

273

您可以使用从Uri

Uri myUri = Uri.parse("http://stackoverflow.com") 
+3

我已经试过这个解决方案,但我有一个问题吧。第一个Uri需要更改为URI(如果它来自java.net包)。其次,它没有“解析”构造函数。你有什么想法我做错了吗? – 2015-09-22 14:53:22

+1

http://developer.android.com/reference/android/net/Uri.html有一个带'parse'方法的'Uri'类。还有一个没有'parse'方法的'URI'类http://developer.android.com/reference/java/net/URI.html。所以正确的课程是'Uri'。确保你有正确的导入 – ccheneson 2015-09-22 15:06:42

+0

@ccheneson为什么应该更正确的URI呢?使用URI,你可以使用'create'方法。它和Uri一样简单。那么你从Uri那里得到什么好处? – kaba713 2017-05-23 15:22:58

1

你打算用URI做parse静态方法?

如果您打算将它与HttpGet一起使用,则可以直接在创建HttpGet实例时使用该字符串。

HttpGet get = new HttpGet("http://stackoverflow.com"); 
+2

但是例如'android.widget.ImageView.setImageURI'不会 - 所以这是一个完全有效的问题。 – Martin 2011-04-27 14:55:02

+1

其实这并不能回答这个问题 – 2015-09-22 14:47:39

12

我只是用java.net。 在这里,你可以做到以下几点:

String myUrl = "http://stackoverflow.com"; 
URI myURI = new URI(myUrl); 
0

您可以通过使用Uri.parse()解析字符串到URI,如下图所示:

Uri myUri = Uri.parse("http://stackoverflow.com"); 

以下是你如何用一个例子你新创建的Uri在一个隐含的意图。要在用户手机上的浏览器中查看。

// Creates a new Implicit Intent, passing in our Uri as the second paramater. 
Intent webIntent = new Intent(Intent.ACTION_VIEW, myUri); 

// Checks to see if there is an Activity capable of handling the intent 
if (webIntent.resolveActivity(getPackageManager()) != null){ 
    startActivity(webIntent); 
} 

NB:有机器人会URIUri之间的差。

0

如果URI未完全编码为其标准,则java.net.URI中的Java解析器将失败。例如,尝试解析:http://www.google.com/search?q=cat|dog。竖条会引发异常。

urllib可以很容易地将字符串转换为java.net.URI。它会预处理和转义URL。

assertEquals("http://www.google.com/search?q=cat%7Cdog", 
    Urls.createURI("http://www.google.com/search?q=cat|dog").toString()); 
1

如果您正在使用科特林和科特林Android的扩展,再有就是这样的一个美丽的方式。

val uri = myUriString.toUri() 

要科特林扩展(KTX)添加到您的项目中添加以下到您的应用程序模块的build.gradle

repositories { 
    google() 
} 

dependencies { 
    implementation 'androidx.core:core-ktx:0.1' 
}