嗨,我需要實現我的Android應用程序的Facebook登錄。我也使用andengine,所以我不能使用facebook提供的登錄按鈕。 我還需要用戶的電子郵件地址。Facebook登錄android
我爲此創建了一個名爲facebookActivity的活動。
public class FacebookActivity extends BaseGameActivity{
private static final int CAMERA_WIDTH = 480;
private static final int CAMERA_HEIGHT = 720;
private Scene scene;
private StatusCallback callback;
@SuppressLint("NewApi")
@Override
public EngineOptions onCreateEngineOptions() {
int SDK_INT = android.os.Build.VERSION.SDK_INT;
if (SDK_INT>8){
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
final Camera camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
return new EngineOptions(true, ScreenOrientation.PORTRAIT_SENSOR, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), camera);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
@Override
public void onCreateResources(
OnCreateResourcesCallback pOnCreateResourcesCallback)
throws Exception {
pOnCreateResourcesCallback.onCreateResourcesFinished();
// TODO Auto-generated method stub
}
@Override
public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback)
throws Exception {
scene = new Scene();
scene.setBackground(new Background(HelperMethods.getColorFromHex("#372108")));
pOnCreateSceneCallback.onCreateSceneFinished(scene);
}
@Override
public void onPopulateScene(Scene pScene,
OnPopulateSceneCallback pOnPopulateSceneCallback) throws Exception {
callback = new Session.StatusCallback() {
// callback when session changes state
@Override
public void call(Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
// 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) {
Log.d("text","Hello " + user.getName() + " " + user.getInnerJSONObject());
}
}
});
}
else{
}
}
};
final OpenRequest openRequest = new OpenRequest(this);
List<String> readPermissions = new ArrayList<String>();
readPermissions.add("email");
openRequest.setPermissions(readPermissions);
openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
openRequest.setCallback(callback);
runOnUiThread(new Runnable(){
@Override
public void run() {
new Session(FacebookActivity.this).openForRead(openRequest);
}
});
pOnPopulateSceneCallback.onPopulateSceneFinished();
}
}
當我運行這段代碼我得到一個異常NullPointerException
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=64206, result=-1, data=Intent { (has extras) }} to activity {com.vocabtrainer.code/com.vocabtrainer.code.FacebookActivity}: java.lang.NullPointerException
我試圖調試,發現onActivityResult Session.getActiveSession()內爲空。 但我的應用程序實際上去Facebook授權我並要求權限。 我錯過了什麼嗎? 傢伙請
您使用的SDK版本3.0.1,而不是3.0?他們有3.0 – IncrediApp 2013-04-10 16:09:16
中的錯誤,我只使用3.0.1我驗證過。 @IncrediApp – 2013-04-10 16:32:41
我知道它的工作。這些問題很好地解釋在 http://stackoverflow.com/questions/13897056/when-to-request-permissions-with-facebooks-new-android-sdk-3-0 – 2013-04-11 01:50:08