2015-06-22 4 views
1

У меня есть фрагмент, которые имеют следующий код авторизовать и загружать фото и видео на Facebook:Facebook SDK 4.0 Доля обратного вызова не называйте Android

private void postPhotoFB(int index) { 
     AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
     if (accessToken != null) { 
      if (!pathImagesFB.isEmpty() && index < pathImagesFB.size() 
        && uploadFbStatus) { 
       File ff = new File(pathImagesFB.get(index)); 

       String format = null; 
       format = URLConnection.guessContentTypeFromName(ff.getName()); 
       ShareApi sA; 
       L("mimetype: " + format); 
       if (new MimetypesFileTypeMap().getContentType(ff).toLowerCase().equals("image/png") || new MimetypesFileTypeMap().getContentType(ff).toLowerCase().equals("image/jpg") 
         || new MimetypesFileTypeMap().getContentType(ff).toLowerCase().equals("image/jpeg")) { 

        if (hasPublishPermission()) { 
         L("sending image"); 
         Bitmap images = ImageUtils.getBitmap(pathImagesFB.get(index), 0); 
         SharePhoto photo = new SharePhoto.Builder().setBitmap(images).build(); 

         SharePhotoContent contentPhoto = new SharePhotoContent.Builder().addPhoto(photo).build(); 
         sA = new ShareApi(contentPhoto); 
         if (sA.canShare()) { 
          sA.share(shareCallback); 
         } else { 
          L("cant share photo to fb"); 
         } 

        } else { 
         LoginManager.getInstance().logInWithPublishPermissions(this, 
           PUBLISH_PERMISSIONS); 
         L("share image to fb get public permission"); 
        } 
       } else if 
         (format.toLowerCase().equals("video/avi")) { 
        if (hasPublishPermission()) { 
         Uri videoFileUri = Uri.fromFile(ff); 
         L("share video to fb " + videoFileUri.getPath()); 
         ShareVideo video = new ShareVideo.Builder() 
           .setLocalUrl(videoFileUri) 
           .build(); 
         ShareVideoContent contentVideo = new ShareVideoContent.Builder() 
           .setVideo(video) 
           .build(); 
         sA = new ShareApi(contentVideo); 
         if (sA.canShare()) { 
          sA.share(shareCallback); 
         } else { 
          L("cant share video to fb"); 
         } 

        } else { 
         LoginManager.getInstance().logInWithPublishPermissions(this, 
           PUBLISH_PERMISSIONS); 
         L("share image to fb get public permission"); 
        } 
       } 

      } else { 
       L("postPhoto false to facebook"); 
       uploadFbStatus = false; 

      } 
      L("facebook_uploading"); 
     } else { 
      L("acces token is null"); 
     } 
    } 

    private ProfileTracker profileTracker; 
    FacebookCallback<LoginResult> loginCallback = new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      L("loginCallback onSuccess"); 
      AccessToken a = loginResult.getAccessToken(); 
      L("expired " + a.getExpires()); 
      L("acces token login a " + a); 

// ------------  **postPhotoFB(0);**     <<<----------------HERE WORKED 

     } 

     @Override 
     public void onCancel() { 
      Log.e("NEW", "loginCallback onCancel"); 
     } 

     @Override 
     public void onError(FacebookException exception) { 
      Log.e("NEW", "loginCallback onError"); 
      String title = "Error"; 
      String alertMessage = exception.getMessage(); 
      showResult(title, alertMessage); 
     } 
    }; 
    private FacebookCallback<Sharer.Result> shareCallback = new FacebookCallback<Sharer.Result>() { 
     @SuppressLint("NewApi") 
     @Override 
     public void onSuccess(Sharer.Result result) { 
      L("upload to Facebook Succes"); 
      if (result.getPostId() != null && uploadFbStatus) { 

       FbImageIndex++; 
       postPhotoFB(FbImageIndex); 
      } 
     } 

     @Override 
     public void onCancel() { 
      Log.e("NEW", "shareCallback Canceled"); 
     } 

     @Override 
     public void onError(FacebookException error) { 
      L("Facebook " + String.format("Error: %s", error.toString())); 
      String title = "Error"; 
      String alertMessage = error.getMessage(); 
      showResult(title, alertMessage); 
     } 


    }; 

    private void showResult(String title, String alertMessage) { 
     new AlertDialog.Builder(getActivity()).setTitle(title) 
       .setMessage(alertMessage).setPositiveButton("Ok", null) 
       .show(); 
    } 

    private boolean hasPublishPermission() { 
     AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
     return accessToken != null 
       && accessToken.getPermissions().contains("publish_actions"); 
    } 

    @SuppressLint("NewApi") 
    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == Activity.RESULT_OK) { 
      switch (requestCode) { 
       case REQUES_FACEBOOK: 
        callbackManager.onActivityResult(requestCode, resultCode, data); 
        login_button_fb.setText(getActivity().getResources().getString(R.string.label_logout)); 
        login_button_fb.setBackground(getActivity().getResources().getDrawable(R.drawable.logout)); 
        break; 
      } 
     } else { 
      L("Activitiresult NOT ok " + requestCode); 
     } 
    } 

Проблема в том, когда я войти в систему и вызвать мой метод пост от FacebookCallback () onSucces (показывает в коде), он работает как sharm, но когда я вызываю свой метод postPhotoFB из любого другого места моего кода (например, нажатие кнопки), shareCallback не будет вызывать evry time, я проверю токен доступа и его ({токен AccessToken : ACCESS_TOKEN_REMOVED разрешения: [public_profile, publish_actions, user_friends, email]}).

Пожалуйста, помогите мне понять, что не так в моем коде, я хочу, чтобы вызов моего метода почты из любого другого места в моем классе. Спасибо.

ответ

0

Вместо того, чтобы маркер доступа маркер доступа = AccessToken.getCurrentAccessToken() сделать маркер доступа маркер доступа = AccessToken.getCurrentAccessToken(). GetToken()

Смежные вопросы