2013-04-09 40 views
0

我有一個主要活動和一項服務,我每隔x小時更新一次從Facebook獲取的一些數據。通過facebook會話服務(SDK 3.0.1)

在這些日子裏我終於移動到新的SDK 3.0.1(從2.X)和我有通過facebook的會話到服務的一個問題:

如果該服務運行時,主活動仍在運行一切工作正常,否則我的會話爲空,所以它崩潰在if(session.isOpened()){...}因爲會話== null。

這裏是我的代碼:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.i("ServiceUpdate", "Received start id " + startId + ": " + intent); 

    session = Session.getActiveSession(); 

    startservice(); 
    return START_STICKY; 
} 


private void startservice() { 

    timer.scheduleAtFixedRate(new TimerTask() { 
     public void run() {   
      if (session.isOpened()) { 
       if (isOnline()) { 
        Log.i("ServiceUpdate", "start timer"); 

        update(); 

        Log.i("ServiceUpdate", "end timer"); 
       } 
      } 

    }, 600000, 6 * 3600000); 

} 

我一定來初始化保存acces_token和的expire_time爲我所用SDK 2.x到做會議?

謝謝!

回答

2

Session的默認行爲是將令牌信息保存在Android的SharedPreferences中,因此您應該可以在服務中調用Session.openActiveSessionFromCache。如果返回null,那意味着你的用戶還沒有連接到Facebook。

+0

是的,非常感謝你,即使我的活動沒有運行,它也能工作。 – user1345108

+0

不幸的是我得糾正我的意見: 這樣我在我的服務中得到一個工作會話,但它變成了新的活動會話,所以我的MainActivity中的會話變爲關閉。 是否有可能在同一時間有兩個活動和打開的會話,一個在我的MainActivity中,另一個在服務中? 使用SDK 2.x可能很簡單...也許我必須像前面那樣通過access_token ... – user1345108

+1

活動會話是一個靜態單例實例,它保存在Session類中。對於您的用例,我首先會檢查Session.getActiveSession是否爲null(在service和MainActivity中),然後創建一個新的活動會話(如果是)。 –