0

Я использую эту библиотеку для интеграции facebook в свое приложение: https://github.com/sromku/android-simple-facebook. Он отлично работает при доступе к профилю, списку друзей и т. Д. Однако, когда я пытаюсь опубликовать фотографию на стене, я использую обычный SDK, но он не работает. В этом случае я не использую библиотеку, потому что она не поддерживает публикацию фотографий на стене/страницах/группах.Facebook Android 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 является сеанс У меня есть после того, как пользователь принял новые разрешения на публикацию.

При отладке я вижу, что сеанс ОТКРЫТО.

Любая идея, почему это не работает?

ответ

3

Я проверил свой код с образцом 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");.