2013-05-04 98 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应该显示。