错误代码2500 Facebook图形API

3

我不明白为什么这个查询在安卓和“Graph Api Explorer”中无法工作,如果它是:

111891332274505?fields=albums.fields(id,name,description,updated_time,created_time,cover_photo)

错误代码

错误代码:2500 错误信息:{HttpStatus: 400,errorCode: 2500, errorType: OAuthException,errorMessage: 语法错误“预期字符串结束而不是“?”。”在第6个字符处: photos?access_token=XXXXXXXXXXXX}

代码

     public void getAlbumFacebook () {
     Request request = new Request(session, "/111891332274505?fields=albums.fields(id,name,description,updated_time,created_time,cover_photo)", null, HttpMethod.GET, new Request.Callback() {
        @Override
        public void onCompleted(Response response) {
            GraphObject graphObject = response.getGraphObject();
            FacebookRequestError error = response.getError();

             if (error != null) {
                 DebugLog.log("Error code: " + error.getErrorCode() + " Error mensaje: " + error.toString());

            }

            if (graphObject != null) {
                JSONArray jsonArray = (JSONArray) graphObject.getProperty("data");
                DebugLog.log("JSON Facebook "+ jsonArray.toString());
            } else {
                 DebugLog.log("Es null");

            }
        }
    });

    Request.executeBatchAsync(request);
 }

解决方案

我已经成功解决了问题,我可以推断出的是“Request”类无法查询插入的字段。

最终我所做的是通过URL构建URL和请求数据。

构建URL

 String id = "111891332274505";
 String url = "https://graph.facebook.com/" + id + "/albums?access_token=" + session.getAccessToken() + "&fields=id,name,description,updated_time";

代码请求

     public JSONObject getRequestFromUrl (String url) {
     try {
         httpClient = new DefaultHttpClient();
         HttpGet get = new HttpGet(url);

         HttpResponse httpResponse = httpClient.execute(get);
         HttpEntity responseEntity = httpResponse.getEntity();
         is = responseEntity.getContent();
         DebugLog.log("Estoy aqui");
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;

        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");             
        }

        is.close();
        json = sb.toString();
        Log.e("JSON", json);
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    return jObj;
 }

您需要为用户包含访问令牌。 - hichris123
谢谢@hichris123,但是如何为用户包含访问令牌? - joselufo
你是否已经完成了OAuth认证? - hichris123
是的,我已经登录到Facebook并且会话对象也已打开。如果我将查询更改为“/111891332274505/albums”,它可以工作,但当我添加字段时就会出现错误。 - joselufo
哦,看这个。语法错误“在第6个字符处期望字符串结束而不是“?”。”:photos?access_token=XXXXXXXXXXXX} 让我看看API参考文档。 - hichris123
有人能帮我回答我的问题吗? :( https://dev59.com/34vda4cB1Zd3GeqPWTfr - Vitor
3个回答

8

access_token参数之前应该有一个&符号&。但现在,在该参数之前附加了一个?。问题出在代码中将?添加到URL而不是&


0
使用Java的RestFB库,可以利用Parameter类。
在你的示例中使用Parameter.with("fields", "albums.fields(id,name,description,updated_time,created_time,cover_photo")。(API可能会更改)

-1

我曾经遇到过同样的问题,但是是与GraphRequest类有关,所以我会为此编写代码。

GraphRequest将生成以下URL

...facebook.com/111891332274505?fields=albums...?access_token=...

替代

...facebook.com/111891332274505?fields=albums...&access_token=...

应该是这样的。

解决方案:

GraphRequest request =  GraphRequest.newGraphPathRequest(access_token, "111891332274505",...);

Bundle parameters = new Bundle();

parameters.putString("fields", "albums...");

request.setParameters(parameters);

request.executeAsync();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接