我正在做我项目的模块,我需要在facebook上完成登录并获取状态,姓名,电子邮件等基本信息......
我遵循了以下教程 https://developers.facebook.com/docs/android/login-with-facebook https://stackoverflow.com/questions/20744927/access-profile-details-from-facebook-login-in-android 和其他人..
我能够执行它们,但即使在显示警告消息后说这是想要获取详细信息.." state"没有被创造.. 我通过state.isOpened函数来了解这个..
任何人都可以帮助......
Intent it=new Intent(getApplicationContext(),FacebookLogin.class);
startActivity(it);
FacebookLogin类:
package com.firstandroid.app;
import java.util.Arrays;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.UiLifecycleHelper;
import com.facebook.model.GraphUser;
import com.facebook.widget.LoginButton;
public class FacebookLogin extends Activity{
private static final String TAG = "FacebookLogin";
private UiLifecycleHelper uiHelper;
private Session session;
GraphUser user;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LoginButton authButton = (LoginButton)findViewById(R.id.authButton);
authButton.setReadPermissions(Arrays.asList("user_likes", "user_status"));
authButton.setReadPermissions(Arrays.asList("email"));
uiHelper = new UiLifecycleHelper(FacebookLogin.this, callback);
uiHelper.onCreate(savedInstanceState);
// String id=user.asMap().get("email").toString();
// String name= user.getLastName();
}
private void onSessionStateChange(Session session, SessionState state, Exception exception) {
if (state.isOpened()) {
Log.i(TAG, "Logged in...");
// user has either logged in or not ...
// make request to the /me API
Request request = Request.newMeRequest(this.getSession(),
new Request.GraphUserCallback() {
// callback after Graph API response with user object
@Override
public void onCompleted(GraphUser user,
Response response) {
// TODO Auto-generated method stub
if (user != null) {
// TextView welcome = (TextView) findViewById(R.id.welcome);
//welcome.setText("Hello " + user.getName() + "!");
Log.e("user fname",user.getFirstName());
Log.e("user lname",user.getLastName());
Log.e("user username",user.getUsername());
Log.e("user email",(String)user.getProperty("email"));
}
}
});
Request.executeBatchAsync(request);
}
else if (state.isClosed()) {
Log.i(TAG, "Logged out...");
}
}
public final Session getSession() {
return this.session;
}
private Session.StatusCallback callback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
onSessionStateChange(session, state, exception);
}
};
@Override
public void onResume() {
super.onResume();
// For scenarios where the main activity is launched and user
// session is not null, the session state change notification
// may not be triggered. Trigger it if it's open/closed.
Session session = Session.getActiveSession();
if (session != null &&
(session.isOpened() || session.isClosed()) ) {
onSessionStateChange(session, session.getState(), null);
}
uiHelper.onResume();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onPause() {
super.onPause();
uiHelper.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
uiHelper.onSaveInstanceState(outState);
}
}
答案 0 :(得分:1)
您需要调用onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data);
}
所以登录完成后。它涉及相同的活动,并且打开会话状态的调用状态回调
初始化UiLifecycleHelper
private UiLifecycleHelper uiHelper;
oncreate中的需要在setContentView
之前调用 uiHelper = new UiLifecycleHelper(this, statusCallback);
uiHelper.onCreate(savedInstanceState);
需要在
中维护会话@Override
protected void onResume() {
super.onResume();
uiHelper.onResume();
}
@Override
protected void onPause() {
super.onPause();
uiHelper.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}
来源链接: link