我使用android-async-http库通过使用RequestParams()
传递参数从url获取json,当参数不嵌套时,它没有任何问题,但我的url包含嵌套参数,我不明白如何将这些参数添加到RequestParams()
获取数据的URL:
https://www.someurl.com/something/v3/something/something?view=READER&fields=description,locale(country,language),name,pages/totalItems,posts/totalItems,published,updated,url&key=my_key
我想知道如何添加locale(country,language)
和pages/totalItems
public void getBlogInformation() throws JSONException {
RequestParams params = new RequestParams();
params.put("key", "123asdf456ghjklabcdefghijklmn");
params.put("view", "reader");
params.put("fields", "description");
//How to add next params???
params.put("locale", );
BlaBlaRESTClient.get("", params, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
try {
Log.d("Response ", ""+response);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
super.onFailure(statusCode, headers, throwable, errorResponse);
Log.d("Error: ", ""+errorResponse);
}
});
}
您的查询字符串具有以下字段-值对(或参数):
- <
- 视图/strong>: 读者
- 字段: 描述,语言环境(国家、语言),名称,页面/totalItems,职位/totalItems,发布,更新url <
- 键/strong>: my_key
没有像'locale'这样的参数,它是你的值的一部分。所以你不能把它作为
传递params.put("locale", "[whateveryouputhere]");
,输出结果类似于:
...?view=reader&locale=[whateveryouputhere]&...
我现在假设你正在调用的API不在你的控制之下,参数必须是那个特定的形式。这意味着您必须对值进行URL编码,因为它包含与URL中使用的字符冲突的字符:
description,locale(country,language),name,pages/totalItems,posts/totalItems,published,updated,url
description%2Clocale(country%2Clanguage)%2Cname%2Cpages%2FtotalItems%2Cposts%2FtotalItems%2Cpublished%2Cupdated%2Curl
你可以这样填充你的RequestParameters:
params.put("key", "123asdf456ghjklabcdefghijklmn");
params.put("view", "reader");
params.put("fields", "description%2Clocale(country%2Clanguage)%2Cname%2Cpages%2FtotalItems%2Cposts%2FtotalItems%2Cpublished%2Cupdated%2Curl");
当然,您可以将'description'替换为合适的描述,并将'totalItems'替换为整数。但原则是一样的。然后,服务器将接受参数字段,并将字符串值解析为其单独的值。
详情请看这里:URL查询字符串Wikipedia
URL编码见这里:URL编码/解码工具