【问题标题】:java.lang.IllegalArgumentException:llegal character in query at index 77 in Androidjava.lang.IllegalArgumentException:Android 中索引 77 处查询中的非法字符
【发布时间】:2015-06-02 16:26:43
【问题描述】:

我正在尝试使用 json 解析 Facebook 提要

显示这个错误

06-02 16:53:33.112: D/ee:(29180): java.lang.IllegalArgumentException: 索引 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();

【问题讨论】:

  • 在这里将您的访问令牌放在一个问题中可能不是一个好主意。

标签: java android facebook facebook-graph-api


【解决方案1】:

您正在构建一个包含多个 ? 的无效 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");

解决它的另一种方法是,在您的 JSONParser 代码中处理它之前,确保 params 包含任何内容:

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

【讨论】:

    【解决方案2】:

    https://www.google.com/search?q=valid+url+characters -- 你在字符 77 周围有什么不寻常的地方吗?另外,https://www.google.com/search?q=encode+url

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

    【讨论】:

    • 这个答案可能更适合作为评论。向他提出问题并发布谷歌搜索链接并不构成答案。
    猜你喜欢
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多