2013-05-04 52 views
1

我正在使用android facebook api發佈用戶提要。android facebook facebook api不工作

登錄成功, 但函數publishstory不起作用。我有下面的代碼。

private void publishStory() { 

     Session session = Session.getActiveSession(); 

     if (session != null){ 

      // Check for publish permissions  
      List<String> permissions = session.getPermissions(); 
      if (!isSubsetOf(PERMISSIONS, permissions)) { 
       pendingPublishReauthorization = true; 
       Session.NewPermissionsRequest newPermissionsRequest = new Session 
         .NewPermissionsRequest(this, PERMISSIONS); 
      session.requestNewPublishPermissions(newPermissionsRequest); 
       return; 
      } 

      Bundle postParams = new Bundle(); 
      postParams.putString("name", "Facebook SDK for Android"); 
      postParams.putString("caption", "Build great social apps and get more installs."); 
      postParams.putString("description", "The Facebook SDK for Android makes it easier and faster to develop Facebook integrated Android apps."); 
      postParams.putString("link", "https://developers.facebook.com/android"); 
      postParams.putString("picture", "https://raw.github.com/fbsamples/ios-3.x-howtos/master/Images/iossdk_logo.png"); 

      Request.Callback callback= new Request.Callback() { 
       public void onCompleted(Response response) { 
        JSONObject graphResponse = response 
               .getGraphObject() 
               .getInnerJSONObject(); 
        String postId = null; 
        try { 
         postId = graphResponse.getString("id"); 
        } catch (JSONException e) { 
         Log.i("error", 
          "JSON error "+ e.getMessage()); 
        } 
        FacebookRequestError error = response.getError(); 
        if (error != null) { 
         Toast.makeText(FacebookActivity.this.getApplicationContext(), 
          error.getErrorMessage(), 
          Toast.LENGTH_SHORT).show(); 
         } else { 
          Toast.makeText(FacebookActivity.this 
           .getApplicationContext(), 
           postId, 
           Toast.LENGTH_LONG).show(); 
        } 
       } 
      }; 

      Request request = new Request(session, "me/feed", postParams, 
            HttpMethod.POST, callback); 

      RequestAsyncTask task = new RequestAsyncTask(request); 
      task.execute(); 
     } 

    } 

的問題是,它執行,直到行

session.requestNewPublishPermissions(newPermissionsRequest); 
       return; 
      } 

,然後出來在返回的功能,而不顯示任何彈出窗口。 任何想法?

回答

0

返回只能用於片段活動我是做它在創造這一問題的正常活動被調用。

0

當您在沒有必要權限的情況下找到訪問令牌時,顯示的代碼調用requestNewPublishPermissions()。 但爲了完成請求後的操作,您必須定義Session.StatusCallback

private static Session.StatusCallback sessionCallback = new Session.StatusCallback() { 
    @Override 
    public void call(Session session, SessionState state, Exception exception) { 
     Log.i(TAG, "callback"); 
     if (exception == null) { 
      if (pendingPublishAction && state.isOpened()) { 
       pendingPublishAction = false; 
       //do your post action; 
      } 
     } 
     else{ 
      //handle exception 
     } 
    } 
}; 

然而,從你說的話,似乎甚至沒有爲新的權限對話框顯示。你是否像這樣實施onActivityResult

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    Session session = Session.getActiveSession(); 
    if (session != null) { 
     session.onActivityResult(this, requestCode, resultCode, data); 
    } 
} 

如果那樣的話一定有一些其他類型的錯誤,在驗證階段,在這種情況下的logcat應該顯示。