首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Android中使用URI构建器或使用变量创建URL

在Android中使用URI构建器或使用变量创建URL
EN

Stack Overflow用户
提问于 2013-10-04 03:46:52
回答 5查看 200.2K关注 0票数 228

我正在开发一个Android应用程序。我需要为我的应用程序构建一个URI来发出API请求。除非有其他方法可以将变量放入URI中,否则这是我找到的最简单的方法。我发现您需要使用Uri.Builder,但我不太确定如何使用。我的url是:

代码语言:javascript
运行
复制
http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?key=[redacted]&mapid=value 

我的方案是http,权限是lapi.transitchicago.com,路径是/api/1.0,路径段是ttarrivals.aspx,查询字符串是key=[redacted]&mapid=value

我的代码如下:

代码语言:javascript
运行
复制
Intent intent = getIntent();
String value = intent.getExtras().getString("value");
Uri.Builder builder = new Uri.Builder();
builder.scheme("http")
    .authority("www.lapi.transitchicago.com")
    .appendPath("api")
    .appendPath("1.0")
    .appendPath("ttarrivals.aspx")
    .appendQueryParameter("key", "[redacted]")
    .appendQueryParameter("mapid", value);

我知道我可以做URI.add,但是我如何将它集成到Uri.Builder中呢?我应该添加像URI.add(scheme)URI.add(authority)之类的所有东西吗?或者这不是做这件事的方法?此外,有没有其他更简单的方法将变量添加到URI/URL?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-10-04 04:01:42

假设我想创建以下URL:

代码语言:javascript
运行
复制
https://www.myawesomesite.com/turtles/types?type=1&sort=relevance#section-name

要使用Uri.Builder构建它,我将执行以下操作。

代码语言:javascript
运行
复制
Uri.Builder builder = new Uri.Builder();
builder.scheme("https")
    .authority("www.myawesomesite.com")
    .appendPath("turtles")
    .appendPath("types")
    .appendQueryParameter("type", "1")
    .appendQueryParameter("sort", "relevance")
    .fragment("section-name");
String myUrl = builder.build().toString();
票数 467
EN

Stack Overflow用户

发布于 2016-01-12 06:18:03

上面的优秀答案变成了一个简单实用的方法。

代码语言:javascript
运行
复制
private Uri buildURI(String url, Map<String, String> params) {

    // build url with parameters.
    Uri.Builder builder = Uri.parse(url).buildUpon();
    for (Map.Entry<String, String> entry : params.entrySet()) {
        builder.appendQueryParameter(entry.getKey(), entry.getValue());
    }

    return builder.build();
}
票数 23
EN

Stack Overflow用户

发布于 2016-01-07 05:13:40

对于second Answer中的示例,我对相同的URL使用了此技术。

http://api.example.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7

代码语言:javascript
运行
复制
Uri.Builder builder = new Uri.Builder();
            builder.scheme("https")
                    .authority("api.openweathermap.org")
                    .appendPath("data")
                    .appendPath("2.5")
                    .appendPath("forecast")
                    .appendPath("daily")
                    .appendQueryParameter("q", params[0])
                    .appendQueryParameter("mode", "json")
                    .appendQueryParameter("units", "metric")
                    .appendQueryParameter("cnt", "7")
                    .appendQueryParameter("APPID", BuildConfig.OPEN_WEATHER_MAP_API_KEY);

然后,在完成构建后,将其作为URL获取,如下所示

代码语言:javascript
运行
复制
URL url = new URL(builder.build().toString());

并打开一个连接

代码语言:javascript
运行
复制
  HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

例如,如果链接是位置uri之类的simple

geo:0,0?q=29203

代码语言:javascript
运行
复制
Uri geoLocation = Uri.parse("geo:0,0?").buildUpon()
            .appendQueryParameter("q",29203).build();
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19167954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档