java.lang.IllegalArgumentException:Android 中索引 77 处的查询中存在非法字符

java.lang.IllegalArgumentException:llegal character in query at index 77 in Android

我正在尝试使用 json

解析 Facebook 提要

显示此错误

06-02 16:53:33.112: D/ee:(29180): java.lang.IllegalArgumentException: Illegal character in query at index 77: https://graph.facebook.com/331394590231184/feed?access_token=******&client_id=**&client_secret=*****?

我使用代码:

private static String url = "https://graph.facebook.com/331394590231184/feed?access_token=**|*****&client_id=***&client_secret=****";
JSONParser jParser = new JSONParser();
List<NameValuePair> params = new ArrayList<NameValuePair>();
JSONObject json = jParser.makeHttpRequest(url, "GET", params);
JSONArray data = json.getJSONArray("data");

JSONParser 代码:

static InputStream is = null;
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();

https://www.google.com/search?q=valid+url+characters -- do you see anything unusual around character 77? Also, https://www.google.com/search?q=encode+url

顺便说一句,编辑问题不会删除以前的修订:https://whosebug.com/posts/30601529/revisions

您正在构建一个包含多个 ? 的无效 URL,您应该将方案、主机和路径作为 url 变量传递,然后传递参数分别为:

private static String url = "https://graph.facebook.com/331394590231184/feed";
JSONParser jParser = new JSONParser();
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("access_token", "**|*****"));
params.add(new BasicNameValuePair("client_id", "***"));
params.add(new BasicNameValuePair("client_secret", "****"));
JSONObject json = jParser.makeHttpRequest(url, "GET", params);
JSONArray data = json.getJSONArray("data");

另一种修复它的方法(无论如何您都应该这样做)是确保 params 在您的 JSONParser 代码中处理它之前包含任何内容:

static InputStream is = null;
DefaultHttpClient httpClient = new DefaultHttpClient();
if (params != null && params.size() > 0){
    String paramString = URLEncodedUtils.format(params, "utf-8");
    url += "?" + paramString;
}
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();