2013-12-20 91 views
1

我已經實現了fb集成,並通過設置某些權限來獲取用戶詳細信息,但它給了我錯誤java.lang.UnsupportedOperationException:Session :試圖請求具有未決請求的會話的新權限。 當我第一次運行,第二次它不給我這個例外,我使用最新的fb SDK進行集成。我會發布我的代碼。試圖請求具有未決請求的會話的新權限。安卓

public class MainActivity extends Activity { 

    Button loginbtn; 
    Session session = Session.getActiveSession(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     loginbtn = (Button)findViewById(R.id.loginbutton); 


     loginbtn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Intent intent = new Intent(MainActivity.this,FacebookLogin.class); 
       startActivity(intent); 

      } 
     }); 

    } 


} 
    public class FacebookLogin extends Activity{ 

    Session.NewPermissionsRequest newPermissionsRequest = new Session 
       .NewPermissionsRequest(this, Arrays.asList("email,user_birthday,user_location,user_hometown,user_about_me,user_relationships")); 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.facebooklogin); 

     Session.openActiveSession(this, true, new Session.StatusCallback() { 

      // callback when session changes state 
      @SuppressWarnings("deprecation") 

      @Override 
      public void call(final Session session, SessionState state, Exception exception) { 
       if (session.isOpened()) { 
        // Log.i("session.isOpened", "session.isOpened"); 
        session.requestNewReadPermissions(newPermissionsRequest); 
       // make request to the /me API 
       Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { 

        // callback after Graph API response with user object 
        @Override 
        public void onCompleted(GraphUser user, Response response) { 

         //session.requestNewReadPermissions(newPermissionsRequest); 


         //System.out.println("Response : "+response.toString()); 
         Log.i("Response", response.toString()); 

        if (user != null) { 
         Log.i("USERName", ""+user.getName()); 
         Log.i("Birthday", ""+user.getBirthday()); 
         Log.i("LastName", ""+user.getLastName()); 
         Log.i("FirstName", ""+user.getFirstName()); 
         Log.i("getId", ""+user.getId()); 
         Log.i("email", " "+user.getLink()+" email :) "+user.asMap().get("email")); 
         Log.i("location", ""+user.asMap().get("location")); 
         Log.i("gender", ""+user.asMap().get("gender")); 

         /* Intent i =new Intent(getApplicationContext(), MainActivity.class); 
         i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
         startActivity(i);*/ 

         finish(); 

        } 
        } 
       }); 



       } 
      } 
      }); 


    } 

    @Override 
    protected void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 
     Log.i(" onResume()", "called"); 

    }; 


    @Override 
    public void onStart() { 
     Log.i(" onStart", "called"); 

     super.onStart(); 

    } 

    @Override 
    public void onStop() { 
     super.onStop(); 

    } 


    @SuppressWarnings("deprecation") 
    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     Log.i("onActivityResult", "called"); 

     super.onActivityResult(requestCode, resultCode, data); 
     Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); 


     final Session session = Session.getActiveSession(); 

     if (session.isOpened()) { 
      session.requestNewReadPermissions(newPermissionsRequest); 

      // make request to the /me API 
      Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { 

       // callback after Graph API response with user object 
       @Override 
       public void onCompleted(GraphUser user, Response response) { 
       if (user != null) { 

        //session.requestNewReadPermissions(newPermissionsRequest); 

        Log.i("USERName2", ""+user.getName()); 
         Log.i("Birthday2", ""+user.getBirthday()); 
        Log.i("LastName2", ""+user.getLastName()); 
        Log.i("FirstName2", ""+user.getFirstName()); 
        Log.i("email2", " "+user.getLink()+" email :) "+user.asMap().get("email")); 
        Log.i("location", ""+user.asMap().get("location")); 
        Log.i("gender", ""+user.asMap().get("gender")); 

         /* Intent i =new Intent(getApplicationContext(), MainActivity.class); 
         i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
         startActivity(i); 
         finish();*/ 
         //Log.i("USERName", ""+user.getName()); 
       } 
       } 
      }); 


      }else { 

      finish(); 
     } 


    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     Log.i("onSaveInstanceState", "called"); 
     super.onSaveInstanceState(outState); 
     Session session = Session.getActiveSession(); 

     Session.saveSession(session, outState); 
    } 


} 
+0

任何人指導我PLZ ?? ?? – Achin

+0

嘗試此鏈接 http://stackoverflow.com/questions/17878500/facebook-post-on-your-behalf-is-not-working-in-android-facebook-sdk-3-0-2?rq= 1 – jarnail

回答

1

使用onActivityResult方法更新活動會話。

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); 

}