【问题标题】:Android Facebook Unsupported post request errorAndroid Facebook 不支持的发布请求错误
【发布时间】:2012-04-05 08:38:55
【问题描述】:

我正在开发 Facebook 应用程序,目前正试图让我的应用程序标记用户的朋友之一。我几乎让它 100% 工作,除非它应该标记此人,而是收到以下错误消息:

{"error":{"message":"不支持的发布请求。","type":"GraphMethodException","code":100}}

用户和照片 ID 肯定是正确的,这不是问题。否则,我不确定还有什么可能导致此错误。代码如下供参考。非常感谢!

public void setTag() {
    String relativePath = Constants.photoID + "/tags/" + Constants.userID;
    Bundle params = new Bundle();
    params.putString("x", "5");
    params.putString("y", "5");
    Constants.mAsyncRunner.request(relativePath, params, "POST", new TagPhotoRequestListener(),
            null);
}



public class TagPhotoRequestListener extends BaseRequestListener {

@Override
public void onComplete(final String response, final Object state) {
    if (response.equals("true")) 
    {
        String message = "User tagged in photo at (5, 5)" + "\n";
        message += "Api Response: " + response;
        Log.i("TagPhotoRequestListener", message);
    } 
    else 
    {
        Log.w("TagPhotoRequestListener", "User could not be tagged.");
    }
}

public void onFacebookError(FacebookError e) {
    Log.w("TagPhotoRequestListener", "Facebook Error: " + e.getMessage());
}

}

编辑:这是我发布图片和获取 photoID 的代码。出于测试目的,这只是我 sdcard 中的一张照片。

public void postPhoto() {
    byte[] data = null;

    Bitmap bi = BitmapFactory.decodeFile("/mnt/sdcard/Download/KathleenSchedule.jpg");
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bi.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    data = baos.toByteArray();

    Bundle params = new Bundle();
    params.putString(Facebook.TOKEN, Constants.mFacebook.getAccessToken());
    params.putString("method", "photos.upload");
    params.putByteArray("picture", data);

    AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(Constants.mFacebook);
    mAsyncRunner.request(null, params, "POST", new PhotoUploadListener(), null);
}


public class PhotoUploadListener extends BaseRequestListener {

@Override
public void onComplete(final String response, final Object state) {
    try {
        // process the response here: (executed in background thread)
        Log.d("PhotoUploadListener", "Response: " + response.toString());
        JSONObject json = Util.parseJson(response);
        System.out.println(response);
        final String photo_id = json.getString("pid");
        Constants.photoID = photo_id;

【问题讨论】:

  • 你能把结果字符串贴在 relativePath 中吗?此外,根据文档,您可以将标签发布到 PHOTO_ID/tags/USER_IDPHOTO_ID/tags?to=USER_ID。你也试过后者吗?
  • 我只是尝试了后者,但没有运气。并且每次运行应用程序的relativePath都会发生变化,在应用程序中的图片在拍摄一张新图片后被上传并标记。这是我最近的 relativePath 的一个例子:100003703122664_62586/tags/100003702982567
  • 你确定这张照片ID是正确的吗?这似乎不对。你如何获得照片的ID?也就是说,Constants.photoID 是从哪里来的?
  • 啊,我认为你是对的。我将我的 photoID 与 Facebook 提供的 Hackbook 中的照片进行比较。在 Hackbook 程序中,他们使用 json.getString("id") 从响应中提取 photoID。我的回复中没有“id”。我有一个“pid”(我正在使用的 post-id)、“aid”(专辑 id?)、src,我不知道我是否有任何过去的东西,因为它从屏幕上消失了。
  • 回应什么?我不知道你是如何获得照片数据的。不要忘记我所知道的只是你在问题中写的。如果您想获得帮助,您需要提供更多信息。

标签: java android facebook sdk


【解决方案1】:

好的,现在你的问题很清楚了。

您正在使用已弃用的photos.upload 方法:

我们正在弃用 REST API,所以如果您是 构建一个新的应用程序你不应该使用这个函数。反而 使用Graph API 和 POST 到User object 的照片连接

因为您使用的是旧方法,所以您得到的是旧响应类型。 切换到使用graph api方式,你应该会在response中得到photo id。

【讨论】:

  • 啊,我明白了。我以为我在使用 Graph API。在我看来,他们的 Android 文档很差。那我得看看 Graph API 方法是什么。谢谢。
  • 我认为你遗漏了一些东西...... graph api与android无关,它是一个基于url(http请求)的api,你可以以任何你想要的方式访问它。 android sdk(很像 js 或 php 的)只是为你包装了 http 请求。有关图形 api 的文档,请查看 Graph Api 文档,而不是 Android SDK 文档。
  • 当然,如果这回答了您的问题,请务必接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-18
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多