Android上的Facebook Session.requestNewPermissions问题

Android上的Facebook Session.requestNewPermissions问题,android,facebook,webview,permissions,Android,Facebook,Webview,Permissions,我在从我的应用程序发布到Facebook的墙上时遇到了一些困难。 这通常发生在通过身份验证对话框(webview)登录Facebook时,而不是通过Facebook的应用程序 03-17 12:18:15.215: W/System.err(23203): java.lang.UnsupportedOperationException: Session: an attempt was made to request new permissions for a session that has a

我在从我的应用程序发布到Facebook的墙上时遇到了一些困难。 这通常发生在通过身份验证对话框(webview)登录Facebook时,而不是通过Facebook的应用程序

03-17 12:18:15.215: W/System.err(23203): java.lang.UnsupportedOperationException: Session: an attempt was made to request new permissions for a session that has a pending request.
    03-17 12:18:15.230: W/System.err(23203):    at com.facebook.Session.requestNewPermissions(Session.java:1006)
    03-17 12:18:15.230: W/System.err(23203):    at com.facebook.Session.requestNewPublishPermissions(Session.java:512)
    03-17 12:18:15.235: W/System.err(23203):    at com.mypackage.com.SocialAccess.postOnMyWall(SocialAccess.java:655)
    03-17 12:18:15.235: W/System.err(23203):    at com.mypackage.com.SocialAccess.facebookPost(SocialAccess.java:529)
    03-17 12:18:15.235: W/System.err(23203):    at com.mypackage.com.MainActivity.SocialHandler(MainActivity.java:4015)
    03-17 12:18:15.235: W/System.err(23203):    at icom.mypackage.com.MainActivity.onClick(MainActivity.java:1837)
    03-17 12:18:15.235: W/System.err(23203):    at android.view.View.performClick(View.java:4475)
    03-17 12:18:15.235: W/System.err(23203):    at android.view.View$PerformClick.run(View.java:18786)
    03-17 12:18:15.235: W/System.err(23203):    at android.os.Handler.handleCallback(Handler.java:730)
    03-17 12:18:15.235: W/System.err(23203):    at android.os.Handler.dispatchMessage(Handler.java:92)
    03-17 12:18:15.235: W/System.err(23203):    at android.os.Looper.loop(Looper.java:176)
    03-17 12:18:15.235: W/System.err(23203):    at android.app.ActivityThread.main(ActivityThread.java:5419)
    03-17 12:18:15.235: W/System.err(23203):    at java.lang.reflect.Method.invokeNative(Native Method)
    03-17 12:18:15.235: W/System.err(23203):    at java.lang.reflect.Method.invoke(Method.java:525)
    03-17 12:18:15.235: W/System.err(23203):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
    03-17 12:18:15.235: W/System.err(23203):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
    03-17 12:18:15.235: W/System.err(23203):    at dalvik.system.NativeStart.main(Native Method)
我的代码是:

public void postOnMyWall(String streamingLink, String webtv, String customText, Context mycontext) {

        context = mycontext;  
        pref = context.getSharedPreferences("AppPref", Context.MODE_PRIVATE);
        String fbtoken = pref.getString("fbtoken", null);

        if(fbtoken.equals("") || fbtoken == null) {
            fbloginrequested = true;
        Log.d("SOCIAL", "fbloginrequested is true during postonymywall");

        }

        if(fbtoken != null) {

         if(!fbtoken.equals("")) {

             Session session = Session.getActiveSession();

             if (session != null){

                 Log.d("SOCIAL", "in posting wall, session is not null");

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

                    try {
                        session.requestNewPublishPermissions(newPermissionsRequest);
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        Log.d("FACEBOOK", "error in requesting new permissions");
                        e.printStackTrace();
                    }

                        return;
                    }


            String fb_message = "";

            if(customText.equals(""))
                fb_message = mycontext.getResources().getString(R.string.twitter_sharing) + " " + webtv + " " + mycontext.getResources().getString(R.string.twitter_sharing_ending);
            else
                fb_message = customText;


            Log.d("SOCIAL", streamingLink);     

                Bundle postParams = new Bundle();
                postParams.putString("name", "Test");
                postParams.putString("caption", "Test");
                postParams.putString("description", "Test");
                postParams.putString("link", streamingLink);
                postParams.putString("message", fb_message);
                postParams.putString("picture", "https://mylink.tv/images/logo.jpg");

                Request.Callback callback= new Request.Callback() {
                    public void onCompleted(Response response) {

                        Log.d("SOCIAL", "response " +response.toString());

                        // crash check
                        int response_code = 0;
                        try {
                            response_code = response.getConnection().getResponseCode();
                        } catch (IOException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }

                        Log.d("SOCIAL", "Facebook response code was " + response_code);
                        //


                        try {
                            JSONObject graphResponse = response
                                    .getGraphObject().getInnerJSONObject();
                            String postId = null;

                            postId = graphResponse.getString("id");
                        } catch (Exception e) {
                            Log.d("SOCIAL", "JSON error "+ e.getMessage());
                        }


                        FacebookRequestError error = response.getError();

                        if (error != null) {
                            Toast.makeText(context, "ERROR: " + error.getErrorMessage(),
                                    Toast.LENGTH_SHORT).show();

                            Toast.makeText(context, "Errore durante la condivisione su Facebook", Toast.LENGTH_SHORT).show();

                        } else {

                             Toast.makeText(context, "Live streaming condiviso su Facebook", Toast.LENGTH_SHORT).show();



                        }

                    }
                };

                //

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

                Log.d("SOCIAL", "Message posted to your facebook wall!.."); 

            } 

             //exp
             else {
                 Log.d("SOCIAL", "in posting wall, session is null");
             }

            } 

            else 
            {
                Log.d("SOCIAL","not logged in fb");
                fbloginrequested = true;

            }


        } 


            else 
            {
                Log.d("SOCIAL","not logged in fb");
                fbloginrequested = true;

            }


          }
public void postOnMyWall(字符串streamingLink、字符串webtv、字符串customText、Context mycontext){
上下文=mycontext;
pref=context.getSharedReferences(“AppPref”,context.MODE\u PRIVATE);
字符串fbtoken=pref.getString(“fbtoken”,null);
if(fbtoken.equals(“”| | fbtoken==null){
fbloginrequested=真;
Log.d(“社交”,“在postonymywall期间,fbloginrequested是真实的”);
}
如果(fbtoken!=null){
如果(!fbtoken.equals(“”){
Session=Session.getActiveSession();
if(会话!=null){
Log.d(“社交”,“在张贴墙中,会话不为空”);
//检查发布权限
List permissions=session.getPermissions();
如果(!isSubsetOf(权限、权限)){
pendingPublishReauthorization=真;
Session.newpermissions请求newpermissions请求=新会话
.NewPermissionsRequest(此,权限);
试一试{
session.requestNewPublishPermissions(newPermissionsRequest);
}捕获(例外e){
//TODO自动生成的捕捉块
Log.d(“FACEBOOK”,“请求新权限时出错”);
e、 printStackTrace();
}
返回;
}
字符串fb_message=“”;
if(customText.equals(“”)
fb_message=mycontext.getResources().getString(R.string.twitter_sharing)+“”+webtv+“”+mycontext.getResources().getString(R.string.twitter_sharing_ending);
其他的
fb_消息=自定义文本;
Log.d(“社会”,streamingLink);
Bundle postParams=新Bundle();
postParams.putString(“名称”、“测试”);
postParams.putString(“标题”、“测试”);
postParams.putString(“描述”、“测试”);
postParams.putString(“link”,streamingLink);
postParams.putString(“消息”,fb_消息);
postParams.putString(“图片”https://mylink.tv/images/logo.jpg");
Request.Callback=new Request.Callback(){
未完成公共无效(响应){
Log.d(“社交”、“响应”+response.toString());
//碰撞检查
int响应_代码=0;
试一试{
response_code=response.getConnection().getResponseCode();
}捕获(IOE1异常){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
Log.d(“社交”,“Facebook响应代码为”+响应代码);
//
试一试{
JSONObject graphResponse=响应
.getGraphObject().getInnerJSONObject();
字符串postId=null;
postId=graphResponse.getString(“id”);
}捕获(例外e){
Log.d(“社交”、“JSON错误”+e.getMessage());
}
FacebookRequestError=response.getError();
if(错误!=null){
Toast.makeText(上下文,“ERROR:+ERROR.getErrorMessage(),
吐司。长度(短)。show();
Toast.makeText(上下文,“Errore durante la conditivione su Facebook”,Toast.LENGTH_SHORT.show();
}否则{
Toast.makeText(上下文,“直播condiviso su Facebook”,Toast.LENGTH_SHORT.show();
}
}
};
//
请求=新请求(会话“me/feed”、后参数、HttpMethod.POST、回调);
最终RequestAsyncTask任务=新RequestAsyncTask(请求);
task.execute();
Log.d(“社交”、“发布到facebook墙上的消息”。”;
} 
//经验
否则{
Log.d(“社交”,“在张贴墙中,会话为空”);
}
} 
其他的
{
Log.d(“社交”、“未登录fb”);
fbloginrequested=真;
}
} 
其他的
{
Log.d(“社交”、“未登录fb”);
fbloginrequested=真;
}
}
试试这个代码

    private void postImageToFacebook(final Bundle param) {
    Session session = Session.getActiveSession();

    Session.openActiveSession(this, true, new Session.StatusCallback() 
    {
          // callback when session changes state
          @Override
          public void call(Session session, SessionState state, Exception exception) 
          {
            if (session.isOpened()) 
            {
                Request request = new Request(session,"me/photos", param, HttpMethod.POST, new Request.Callback() 
                {
                    @Override
                    public void onCompleted(Response response) 
                    {
                        notifyUser("Successfully posted on your wall.");
                    }
                }, null);

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

您必须从您的facebook开发者帐户授予权限。