将字符串转换为Uri


175

如何在Java(Android)中将字符串转换为Uri?即:

String myUrl = "http://stackoverflow.com";

myUri = ???;

Answers:


400

您可以使用parse静态方法从Uri

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

4
我已经尝试过这种解决方案,但是我有一个问题。首先将Uri更改为URI(如果来自java.net包)。其次,它没有“解析”构造函数。你知道我在做什么错吗?
的JürgenK.

2
有一个Uri带有parse方法developer.android.com/reference/android/net/Uri.html的类。还有一个URIdeveloper.android.com/reference/java/net/URI.html没有parse方法。因此,正确使用的类是Uri。确保您输入的是正确的
ccheneson 2015年

1
@ccheneson为什么Uri比URI更正确?使用URI,您可以只使用create方法。它和Uri一样简单。那么,您可以从Uri获得什么好处?
kaba713

没错 错误的进口也是我烦人的问题之一。
Omid.N

33

我只是在用java.net 包裹。在这里您可以执行以下操作:

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

URI与Uri不同。
Ali Alaoi

7

如果您使用的是Kotlin和Kotlin android扩展,那么有一种不错的方法。

val uri = myUriString.toUri()

要将Kotlin扩展(KTX)添加到您的项目中,请将以下内容添加到应用模块的build.gradle中

  repositories {
    google()
}

dependencies {
    implementation 'androidx.core:core-ktx:1.0.0-rc01'
}

2

您可以使用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);
}

注意: Androids URIUri之间有区别。


-1

您将如何处理URI?

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

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

2
但是例如android.widget.ImageView.setImageURI不会—因此,这是一个完全有效的问题。
马丁

1
其实这不回答这个问题
于尔根K.

-1

java.net.URI如果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());
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.