Facebook Android SDK - 可以阅读个人资料,但不能将照片发布到墙上

时间:2015-02-01 15:43:42

标签: android facebook-graph-api facebook-android-sdk facebook-access-token facebook-authentication

我正在使用此库将facebook与我的应用集成:https://github.com/sromku/android-simple-facebook。它在访问个人资料,朋友列表等时工作正常。但是,当我尝试在墙上发布照片时,我使用常规SDK,但它不起作用。在这种情况下,我不使用该库,因为它不支持将照片发布到墙/页面/组。

我在请求发布权限后传递了我的会话并触发了此请求:

public void uploadToFaceWall() {
    Session session = mFaceSession;
    if (session != null){
        String fbPhotoAddress = null;
        Request.Callback uploadPhotoRequestCallback = new Request.Callback() {
            @Override
               public void onCompleted(Response response) {
                if (response.getError() != null) {
                    Log.d(TAG, "error: "+response.toString()):
                } 

                Object graphResponse = response.getGraphObject().getProperty("id");
                if (graphResponse == null || !(graphResponse instanceof String) || 
                    TextUtils.isEmpty((String) graphResponse)) {
                    Log.d(TAG, "failed photo upload/no response");
                } else {
                    finish();
                } 
             }
          };
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inPreferredConfig = Bitmap.Config.ARGB_8888;
        Bitmap bitmap = null;
        try {
            bitmap = BitmapFactory.decodeFile(myFacePost.getImages().getString(0), options);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        Bundle parameters = new Bundle();
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
        byte[] byteArray = stream.toByteArray();
        parameters.putByteArray("picture", byteArray);
        parameters.putString("message", "Check out my picture");
        Request req = new Request(session, "me/photos", parameters, HttpMethod.POST, uploadPhotoRequestCallback);
        req.executeAndWait();
    }
}

但是,这不起作用,并且响应包含错误:

{Response:  responseCode: 200, graphObject: null, error: {HttpStatus: -1, errorCode: -1, errorType: null, errorMessage: java.lang.NullPointerException}, isFromCache:false}

mFaceSession是用户接受新发布权限后的会话。

调试时,我看到会话已打开。

知道为什么这不起作用?

1 个答案:

答案 0 :(得分:3)

我已使用随SDK附带的HelloFacebook示例测试了您的代码,替换为:https://github.com/facebook/facebook-android-sdk/blob/master/samples/HelloFacebookSample/src/com/facebook/samples/hellofacebook/HelloFacebookSampleActivity.java#L351

它工作正常。您可能遇到的问题是最后一行req.executeAndWait();如果您在主要主题上执行此操作,则会遇到异常,因此请将其更新为req.executeAsync(),如同样本,它应该工作。

另请注意,您获得了一个成功的200代码,您可以通过转到该用户时间轴来查看它是否有效。 NullPointerException可能来自这一行:Object graphResponse = response.getGraphObject().getProperty("id");