2011-10-03 60 views
2

我正在尝试编写一个简单的2屏幕应用程序,其中第一个屏幕用户在Facebook和第二个屏幕发布用户的墙上点击简单按钮。在活动之间传递会话信息(Facebook发布在墙上样本)

我收到一个NullPointerException,当我点击PostonWall按钮时,我相信它与活动之间传递会话信息有关。但我无法弄清楚如何恢复会话信息。

我在这里做错了什么?任何建议高度赞赏!

在此先感谢。

这是我的第一屏幕代码。

public class HelloWorldActivity extends Activity { 
    /** Called when the activity is first created. */ 
    private static final String FACEBOOK_APPID = "XXXXXX"; 
    private static final String FACEBOOK_PERMISSION = "publish_stream"; 
    public FacebookConnector facebookConnector; 
    private TextView FacebookStatus; 
    private Button FacebookButton, ButtonNextScreen; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     FacebookStatus=(TextView)findViewById(R.id.textView1); 
     FacebookButton=(Button)findViewById(R.id.button1); 
     ButtonNextScreen=(Button)findViewById(R.id.ButtonNextScreen); 

     this.facebookConnector = new FacebookConnector(FACEBOOK_APPID, this, getApplicationContext(), new String[] {FACEBOOK_PERMISSION}); 

     FacebookButton.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       SessionEvents.AuthListener listener = new SessionEvents.AuthListener() { 

        @Override 
        public void onAuthSucceed() { 
         SessionStore.save(facebookConnector.getFacebook(), getApplicationContext()); 
         FacebookStatus.setText("Facebook Authenticated!!"); 
        } 

        @Override 
        public void onAuthFail(String error) { 

        } 
       }; 
       SessionEvents.addAuthListener(listener); 
       facebookConnector.login();    
      } 
     }); 

     ButtonNextScreen.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       // Intend to go second screen (SendScreen) 
       Intent i=new Intent(v.getContext(),SecondClass.class); 
       startActivity(i);    
      } 
     }); 


    } 
} 

,//////////////// FacebookConnector方法

public FacebookConnector(String appId,Activity activity,Context context,String[] permissions) { 
     this.facebook = new Facebook(appId); 

     SessionStore.restore(facebook, context); 
     SessionEvents.addAuthListener(mSessionListener); 
     SessionEvents.addLogoutListener(mSessionListener); 

     this.context=context; 
     this.permissions=permissions; 
     this.mHandler = new Handler(); 
     this.activity=activity; 
    } 

///////////////会话保存和会话方法

public class SessionStore { 

    private static final String TOKEN = "access_token"; 
    private static final String EXPIRES = "expires_in"; 
    private static final String KEY = "facebook-session"; 

    public static boolean save(Facebook session, Context context) { 
     Editor editor = 
      context.getSharedPreferences(KEY, Context.MODE_PRIVATE).edit(); 
     editor.putString(TOKEN, session.getAccessToken()); 
     editor.putLong(EXPIRES, session.getAccessExpires()); 
     return editor.commit(); 
    } 

    public static boolean restore(Facebook session, Context context) { 
     SharedPreferences savedSession = 
      context.getSharedPreferences(KEY, Context.MODE_PRIVATE); 
     session.setAccessToken(savedSession.getString(TOKEN, null)); 
     session.setAccessExpires(savedSession.getLong(EXPIRES, 0)); 
     return session.isSessionValid(); 
    } 

//////////最后二等

公共类二等延伸活动{

private static final String TAG = "FacebookSample"; 
private static final String MSG = "Message from FacebookSample"; 
private Button FacebookPostButton; 
private FacebookConnector facebookConnector; // I THINK THIS SHOULD BE THE ISSUE 
private final Handler mFacebookHandler = new Handler(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.second); 

     FacebookPostButton=(Button)findViewById(R.id.FacebookPostButton);    
     FacebookPostButton.setOnClickListener(new OnClickListener() {    
     public void onClick(View v) {     
     if (SessionStore.restore(facebookConnector.getFacebook(), getApplicationContext()))       
       { 
        postMessageInThread(); 
       }     
      } 
     }); 

}

回答

2

尝试保存访问令牌的一个SharedPreferances。

事情是这样的:

    SharedPreferences.Editor editor = mPrefs.edit(); 
       editor.putString("access_token", facebook.getAccessToken()); 

,然后把它在其他activites