我正在使用android-async-http库通过使用RequestParams()
传递params来从url获取json,当参数没有嵌套时它工作没有任何问题,但我的url包含嵌套的params而我不知道了解如何将这些参数添加到RequestParams()
从以下位置获取数据的网址:
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);
}
});
}
答案 0 :(得分:0)
您查询字符串具有以下字段 - 值对(或参数):
没有“locale”等参数,它是您的某个值的一部分。所以你不能把它传递给
params.put("locale", "[whateveryouputhere]");
因为它会被输出类似于:
...?view=reader&locale=[whateveryouputhere]&...
我现在假设您调用的API不在您的控制之下,参数必须采用该特定形式。这意味着您必须对值进行URL编码,因为它包含与URLS中使用的字符冲突的字符:
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'。但原则仍然是一样的。然后服务器将获取参数 fields 并将字符串值解析为其各个值。
详情请见此处: URL Query String Wikipedia
请点击此处查看网址编码: URL Encoding/Decoding Tool