我一直在使用Facebook登录识别用户的应用程序中工作。现在,我已成功添加登录,但我需要获取一些用户信息(如姓名和年龄)并将其发送到新活动。我一直在寻找如何做到这一点,我只是发现了如何自己做这些,当我尝试做这两个应用程序崩溃。 这是我当前的onCreate()方法:
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
callbackManager = CallbackManager.Factory.create();
setContentView(R.layout.activity_entry);
info = (TextView)findViewById(R.id.info);
facebookButton = (LoginButton) findViewById(R.id.facebook_button);
facebookButton.setReadPermissions(Arrays.asList("public_profile, user_birthday"));
facebookButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
// Application code
Log.v("LoginActivity", response.toString());
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id, name, gender, birthday");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
info.setText(getString(R.string.facebook_login_cancel));
}
@Override
public void onError(FacebookException e) {
info.setText(getString(R.string.facebook_login_fail));
}
});
}
所以现在,我的问题是我如何给予&#34;创建的包以启动新的活动以及如何访问此数据。我已经尝试过这样做了#34;正常&#34;方式,即使没有捆绑,
Intent intent = new Intent(LogInActivity.this, BlankActivity.class);
startActivity(intent);
我登录后每次都会崩溃。
我怎么能这样做?
答案 0 :(得分:0)
将它放在OnSuccess方法而不是Bundle paraneters ......
public void onSuccess(LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
// Application code
Log.v("LoginActivity", response.toString());
}
});
Intent intent = new Intent(SendingActivity.this, RecievingActivity.class);
intent.putExtra("keyName", value);
startActivity(intent);
}
并检索活动B中的信息:
String data = getIntent().getExtras().getString("keyName","defaultKey");
答案 1 :(得分:0)
您可以使用LoginManager。为Facebook登录调用点击事件。
@Override
public void onClick(View v) {
List<String> permissionNeeds = Arrays.asList("user_photos", "email", "user_friends", "user_posts");
LoginManager.getInstance().logInWithReadPermissions(this, permissionNeeds);
}
Then add this function:
private FacebookCallback<LoginResult> mFacebookCallback = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Toast.makeText(getApplicationContext(), "in LoginResult on success", Toast.LENGTH_LONG).show();
AccessToken accessToken = loginResult.getAccessToken();
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
JSONObject me = response.getJSONObject();
try {
if (me != null) {
User userObj = new UserData().GetFBUserData(object);
String text = me.getString("email");
Log.d("email", text);
String email = object.optString("email");
String id = object.optString("id");
String name = object.optString("name");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
String REQUEST_FIELDS =
TextUtils.join(",", new String[]{"id", "name", "link", "email", "picture", "gender", "birthday","friendlists{id}","friends"});
Bundle parameters = new Bundle();
parameters.putString("fields", REQUEST_FIELDS);
request.setParameters(parameters);
GraphRequest.executeBatchAsync(request);
Profile profile = Profile.getCurrentProfile();
//mTextDetails.setText(constructWelcomeMessage(profile));
}
}
此代码正常运行。我实现了这段代码。此代码将返回用户配置文件,如名称,电子邮件,图像。您可以从onCompleted函数内部调用新活动。