Facebook Android SDK - может читать профиль, но не публиковать фото на стене

Я использую эту библиотеку для интеграции 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)


Я проверил ваш код с образцом HelloFacebook, который поставляется с SDK, замененным здесь: 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");.

person Gokhan Caglar    schedule 02.02.2015