Android:facebook登录获取名称和电子邮件等基本信息

时间:2014-04-28 08:16:44

标签: android android-facebook

我正在做我项目的模块,我需要在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);
    }
}

1 个答案:

答案 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