2014-03-05 30 views
1

我想用這個簡單的應用程序來顯示我的Facebook名稱,該應用程序在點擊一個按鈕後調用login()Android - Facebook SDK獲取用戶名 - Request.GraphUserCallback返回null

會話正確打開,但Request.GraphUserCallback不起作用,似乎返回null。

當我啓動我的應用程序時,LogCat不會顯示任何錯誤,但在Graph API返回用戶時,我在onCompleted上顯示的Toast上看不到我的user.name()

這裏是我的代碼,而無需進口,沒有佈局:

public class MainActivity extends Activity { 

private Session.StatusCallback statusCallback; 
private Request.GraphUserCallback requestGraphUserCallback; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Toast.makeText(getApplicationContext(), "Ci siamo", Toast.LENGTH_SHORT).show();  

    statusCallback= new SessionStatusCallback(); 

    requestGraphUserCallback = new RequestGraphUserCallback();  

} 


public void login(View view){ 


    Toast.makeText(getApplicationContext(), "Login", Toast.LENGTH_SHORT).show(); 

    // start Facebook Login 
    Session.openActiveSession(this, true, statusCallback); 

    Toast.makeText(getApplicationContext(), "finito login", Toast.LENGTH_SHORT).show(); 

} 


//CLASSE SESSIONE 
private class SessionStatusCallback implements Session.StatusCallback { 

    @Override 
    public void call(Session session, SessionState state, Exception exception) { 

     if (session.isOpened()) { 
      // make request to the /me API 

      Request.newMeRequest(session, requestGraphUserCallback); 
     } 

    } 
} 


//CLASSE GRAPH 

private class RequestGraphUserCallback implements Request.GraphUserCallback{ 

    // callback after Graph API response with user object 
    @Override 
    public void onCompleted(GraphUser user, Response response) { 
     if (user != null) { 
      Toast.makeText(getApplicationContext(), user.getName(), Toast.LENGTH_SHORT).show(); 
     } 
    } 
    } 

} 

什麼,我做錯了什麼? Facebook文檔非常不全面。 已閱讀this問題和this教程(使用我的代碼的合同版本)。

+0

你已經設置了請求權限,facebook sdk有示例登錄代碼。 –

+0

如果你正在談論INTERNET權限是在清單文件 – francescop

+0

沒有,facebook有自己的權限來閱讀用戶的詳細信息。 –

回答

6

您沒有執行請求。在你的SessionStatusCallback中,創建請求後,你應該調用executeAsync()方法。

+2

我愛你,你是我的英雄,經過兩天在互聯網上搜索,你救了我的生命。我解決了:Request.newMeRequest(session,requestGraphUserCallback).executeAsync(); – francescop

+0

FB SDK表示executeMeRequestAsync已被棄用,因此使用newMeRequest,但在努力重構API時,我錯過了這一重要步驟。謝謝你,先生 – Tushar

相關問題