android开发分享在Android中使用URI生成器或使用variables创buildURL

我正在开发一个Android应用程序。 我需要为我的应用程序构build一个URI来发出API请求。 除非有另外一种方法可以将variables放在URI中,否则这是我find的最简单的方法。 我发现你需要使用Uri.Builder ,但我不太清楚如何。 我的url是:

 https://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?key=[redacted]&mapid=value 

我的scheme是http,权限是lapi.transitchicago.com ,path是/api/1.0 ,path段是ttarrivals.aspx ,查询string是key=[redacted]&mapid=value

我的代码如下:

 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)等? 或者是不是这样做? 另外,有没有其他更简单的方法来添加一个variables到一个URI / URL?

    假设我想创build下面的URL:

     https://www.myawesomesite.com/turtles/types?type=1&sort=relevance#section-name 

    为了与Uri.Builder一起构build,我将执行以下操作。

     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(); 

    还有另一种使用Uri ,我们可以达到同样的目标

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

    为了build立Uri,你可以使用这个

     final String FORECAST_BASE_URL = "https://api.example.org/data/2.5/forecast/daily?"; final String QUERY_PARAM = "q"; final String FORMAT_PARAM = "mode"; final String UNITS_PARAM = "units"; final String DAYS_PARAM = "cnt"; 

    你可以在Uri.parse()appendQueryParameter()声明所有这些,

     Uri builtUri = Uri.parse(FORECAST_BASE_URL) .buildUpon() .appendQueryParameter(QUERY_PARAM, params[0]) .appendQueryParameter(FORMAT_PARAM, "json") .appendQueryParameter(UNITS_PARAM, "metric") .appendQueryParameter(DAYS_PARAM, Integer.toString(7)) .build(); 

    最后

     URL url = new URL(builtUri.toString()); 

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

     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(); } 

    为例在second Answer我用这个技术的相同的URL

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

     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); 

    那么在完成构build后就可以像这样得到它的URL

     URL url = new URL(builder.build().toString()); 

    并打开一个连接

      HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 

    如果链接是simple如位置uri,例如

    geo:0,0?q=29203

     Uri geoLocation = Uri.parse("geo:0,0?").buildUpon() .appendQueryParameter("q",29203).build(); 

    使用appendEncodePath()可以比appendPath()节省多行,下面的代码片段构build了这个URL: https://api.openweathermap.org/data/2.5/forecast/daily?zip=94043 : appendPath()

     Uri.Builder urlBuilder = new Uri.Builder(); urlBuilder.scheme("http"); urlBuilder.authority("api.openweathermap.org"); urlBuilder.appendEncodedPath("data/2.5/forecast/daily"); urlBuilder.appendQueryParameter("zip", "94043,us"); URL url = new URL(urlBuilder.build().toString()); 

    这是一个很好的解释方法:

    有两种forms的URI

    1 – Builder(准备修改准备使用

    2 – build成( 准备修改 ,准备使用

    你可以通过创build一个build造者

     Uri.Builder builder = new Uri.Builder(); 

    这将返回一个生成器准备好像这样修改: –

     builder.scheme("https"); builder.authority("api.github.com"); builder.appendPath("search"); builder.appendPath("repositories"); builder.appendQueryParameter(PARAMETER_QUERY,parameterValue); 

    但要使用它,你必须先build立它

     retrun builder.build(); 

    或者你要使用它。 然后你已经build成了 ,已经为你准备好了,可以使用但不能修改。

     Uri built = Uri.parse("your URI goes here"); 

    这是准备使用,但如果你想修改它,你需要build立的()

     Uri built = Uri.parse(Your URI goes here") .buildUpon(); //now it's ready to be modified .buildUpon() .appendQueryParameter(QUERY_PARAMATER, parameterValue) //any modification you want to make goes here .build(); // you have to build it back cause you are storing it // as Uri not Uri.builder 

    现在每一次你想修改它,你都需要build立()和最后的build()

    所以Uri.Builder是一个Buildertypes的存储Builder。 Uri是一个Builttypes,它存储了一个已经构build的URI

    new Uri.Builder(); 重新生成一个BuilderUri.parse(“你的URI在这里”)返回一个Built

    并且build()可以将其从Builder更改为BuiltbuildUpon()你可以把它从Built to Builder改成你可以做的

     Uri.Builder builder = Uri.parse("URL").buildUpon(); // here you created a builder, made an already built URI with Uri.parse // and then change it to builder with buildUpon(); Uri built = builder.build(); //when you want to change your URI, change Builder //when you want to use your URI, use Built 

    也是相反的:

     Uri built = new Uri.Builder().build(); // here you created a reference to a built URI // made a builder with new Uri.Builder() and then change it to a built with // built(); Uri.Builder builder = built.buildUpon(); 

    希望我的回答有帮助:) <3

      以上就是android开发分享在Android中使用URI生成器或使用variables创buildURL相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

      www.ctvol.com true Article android开发分享在Android中使用URI生成器或使用variables创buildURL

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/516860.html

      (0)
      上一篇 2020年12月3日 下午9:05
      下一篇 2020年12月3日 下午9:08

      精彩推荐