将字符串转换为 Uri
Posted
技术标签:
【中文标题】将字符串转换为 Uri【英文标题】:Convert String to Uri 【发布时间】:2011-03-30 01:54:52 【问题描述】:如何在 Java (android) 中?即:
String myUrl = "http://***.com";
myUri = ???;
【问题讨论】:
【参考方案1】:您可以使用来自Uri
的parse
静态方法
//...
import android.net.Uri;
//...
Uri myUri = Uri.parse("http://***.com")
【讨论】:
我已经尝试过这个解决方案,但我遇到了问题。首先需要将 Uri 更改为 URI(如果它来自 java.net 包)。其次,它没有“解析”构造函数。你知道我做错了什么吗? 有一个Uri
类和一个 parse
方法 developer.android.com/reference/android/net/Uri.html 。还有一个 URI
类 developer.android.com/reference/java/net/URI.html 没有 parse
方法。所以要使用的正确类是Uri
。确保您有正确的导入
@ccheneson 为什么 Uri 应该比 URI 更正确?使用 URI,您可以使用 create
方法。它和 Uri 一样简单易用。那么你从 Uri 中得到了什么好处呢?
没错。错误的导入也是我恼人的问题之一。
就这么简单:)【参考方案2】:
我只是在使用java.net
包。
在这里您可以执行以下操作:
...
import java.net.URI;
...
String myUrl = "http://***.com";
URI myURI = new URI(myUrl);
【讨论】:
【参考方案3】:如果您使用的是 Kotlin 和 Kotlin android 扩展,那么有一种很好的方法。
val uri = myUriString.toUri()
要将 Kotlin 扩展 (KTX) 添加到您的项目,请将以下内容添加到您的应用模块的 build.gradle
repositories
google()
dependencies
implementation 'androidx.core:core-ktx:1.0.0-rc01'
【讨论】:
【参考方案4】:您可以使用 Uri.parse() 将 String 解析为 Uri,如下所示:
Uri myUri = Uri.parse("http://***.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);
注意:URI和Uri之间存在差异。
【讨论】:
【参考方案5】:如果 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());
【讨论】:
【参考方案6】:你也可以这样做
对于http
var response = await http.get(Uri.http("192.168.100.91", "/api/fetch.php"));
或
对于 https
var response = await http.get(Uri.https("192.168.100.91", "/api/fetch.php"));
【讨论】:
【参考方案7】:你打算用这个 URI 做什么?
例如,如果您只是将它与 HttpGet 一起使用,则可以在创建 HttpGet 实例时直接使用该字符串。
HttpGet get = new HttpGet("http://***.com");
【讨论】:
但例如android.widget.ImageView.setImageURI
不会——所以这是一个完全有效的问题。
其实这并没有回答问题【参考方案8】:
import java.net.URI;
以下内容也适用于我:
URI uri = URI.create("http://***.com");
或
URI uri = new URI("http://***.com");
【讨论】:
以上是关于将字符串转换为 Uri的主要内容,如果未能解决你的问题,请参考以下文章
将 byte[] 转换为数据 URI 的 Base64 字符串