无法从Facebook的个人资料信息在Android SDK中4 [英] Unable to get profile info from Facebook in android SDK 4
问题描述
我无法摆脱来自Facebook SDK V4的 ProfileTracker
功能的基本个人资料信息。我怎样才能得到所有的信息?
我目前在成功登录和歌厅的accessToken
和用户ID
。
code:
公共类HelloFacebookSampleActivity扩展FragmentActivity { LoginButton loginButton; CallbackManager callbackManager;
私人字符串fbUserID;
私人字符串fbProfileName;
私人字符串fbAuthToken; 私人AccessTokenTracker accessTokenTracker;
私人ProfileTracker profileTracker;
私有静态最后弦乐TAG =FacebookLogin; @覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState); FacebookSdk.sdkInitialize(getApplicationContext()); callbackManager = CallbackManager.Factory.create(); 的setContentView(R.layout.test);
loginButton =(LoginButton)findViewById(R.id.login_button);
loginButton.setReadPermissions(user_friends,电子邮件,user_birthday,user_likes); profileTracker =新ProfileTracker(){
@覆盖
保护无效onCurrentProfileChanged(
简介oldProfile,
简介currentProfile){
fbProfileName = currentProfile.getName(); Toast.makeText(getBaseContext(),档案,Toast.LENGTH_LONG).show();
Log.d(TAG,姓:+ currentProfile.getFirstName()); Log.d(TAG,名字:+ currentProfile.getLastName()); Log.d(TAG,中间名:+ currentProfile.getMiddleName()); Log.d(TAGLinkUri:+ currentProfile.getLinkUri()); Log.d(TAG,ProfilePictureUri:+ currentProfile.getProfilePictureUri(250,250));
}
};
accessTokenTracker =新AccessTokenTracker(){
@覆盖
保护无效onCurrentAccessTokenChanged(
的accessToken oldAccessToken,
的accessToken currentAccessToken){
fbAuthToken = currentAccessToken.getToken();
fbUserID = currentAccessToken.getUserId(); Log.d(TAG,用户ID:+ fbUserID);
Log.d(TAG,访问令牌+ fbAuthToken);
//确保我们的个人资料是最新的
Profile.fetchProfileForCurrentAccessToken();
}
};
//回调注册
loginButton.registerCallback(callbackManager,新FacebookCallback< LoginResult>(){
@覆盖
公共无效的onSuccess(LoginResult loginResult){
} @覆盖
公共无效onCancel(){
//应用code Toast.makeText(getBaseContext(),取消,Toast.LENGTH_LONG).show();
} @覆盖
公共无效onerror的(FacebookException除外){
//应用code
Toast.makeText(getBaseContext(),ER,Toast.LENGTH_LONG).show();
}
});
}
@覆盖
公共无效的onDestroy(){
super.onDestroy(); accessTokenTracker.stopTracking();
profileTracker.stopTracking();
}
@覆盖
保护无效的onActivityResult(INT申请code,INT结果code,意图数据){
super.onActivityResult(要求code,结果code,数据);
callbackManager.onActivityResult(要求code,结果code,数据);
}
错误:
显示java.lang.NullPointerException:尝试在调用接口方法无效com.android.okhttp.internal.http.Transport.writeRequestHeaders(com.android.okhttp.Request)'空对象引用
在com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:611)
在com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:388)
在com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:332)
在com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse$c$c(HttpURLConnectionImpl.java:500)
在com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getResponse$c$c(DelegatingHttpsURLConnection.java:105)
在com.android.okhttp.internal.http.HttpsURLConnectionImpl.getResponse$c$c(HttpsURLConnectionImpl.java:25)
要完成这项工作,有3件code,你需要纳入你的code:
-
创建
profileTracker
:mProfileTracker =新ProfileTracker(){
@覆盖
保护无效onCurrentProfileChanged(PROFILE资料,档案PROFILE2){
的updateUI(); //这是第三件code的我将在下面讨论
}
}; -
请确保您启动
profileTracker
在的onCreate
按照Facebook的DOC:mProfileTracker.startTracking();
-
获取配置文件信息:
私人无效的updateUI(){ 布尔enableButtons = AccessToken.getCurrentAccessToken()!= NULL;简介配置= Profile.getCurrentProfile();
如果(配置文件== NULL){
Log.e(档案,空);
}
如果(enableButtons&安培;&安培;型材!= NULL){
Log.e(访问令牌,AccessToken.getCurrentAccessToken()的toString());
Log.e(TabSocial,profile.getName());
}}
我花这个凌晨3个小时的测试出HelloFacebookSample应用之后发现这一点。
I am unable to get basic profile info from the ProfileTracker
function from Facebook SDK v4. How can I get all the info?
I am currently successfully logging in and geting accesstoken
and user-id
.
Code:
public class HelloFacebookSampleActivity extends FragmentActivity {
LoginButton loginButton ;
CallbackManager callbackManager;
private String fbUserID;
private String fbProfileName;
private String fbAuthToken;
private AccessTokenTracker accessTokenTracker;
private ProfileTracker profileTracker;
private static final String TAG = "FacebookLogin";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
callbackManager = CallbackManager.Factory.create();
setContentView(R.layout.test);
loginButton = (LoginButton) findViewById(R.id.login_button);
loginButton.setReadPermissions("user_friends,email,user_birthday,user_likes");
profileTracker = new ProfileTracker() {
@Override
protected void onCurrentProfileChanged(
Profile oldProfile,
Profile currentProfile) {
fbProfileName = currentProfile.getName();
Toast.makeText(getBaseContext(),"profile",Toast.LENGTH_LONG).show();
Log.d(TAG, "FirstName: " + currentProfile.getFirstName() );
Log.d(TAG, "LastName: " + currentProfile.getLastName() );
Log.d(TAG, " MiddleName: " + currentProfile.getMiddleName() );
Log.d(TAG, "LinkUri: " + currentProfile.getLinkUri() );
Log.d(TAG, "ProfilePictureUri: " + currentProfile.getProfilePictureUri(250,250) );
}
};
accessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(
AccessToken oldAccessToken,
AccessToken currentAccessToken) {
fbAuthToken = currentAccessToken.getToken();
fbUserID = currentAccessToken.getUserId();
Log.d(TAG, "User id: " + fbUserID);
Log.d(TAG, "Access token is: " + fbAuthToken);
// Ensure that our profile is up to date
Profile.fetchProfileForCurrentAccessToken();
}
};
// Callback registration
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
}
@Override
public void onCancel() {
// App code
Toast.makeText(getBaseContext(),"cancel",Toast.LENGTH_LONG).show();
}
@Override
public void onError(FacebookException exception) {
// App code
Toast.makeText(getBaseContext(),"er",Toast.LENGTH_LONG).show();
}
});
}
@Override
public void onDestroy() {
super.onDestroy();
accessTokenTracker.stopTracking();
profileTracker.stopTracking();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
Error:
java.lang.NullPointerException: Attempt to invoke interface method 'void com.android.okhttp.internal.http.Transport.writeRequestHeaders(com.android.okhttp.Request)' on a null object reference
at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:611)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:388)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:332)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:500)
at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105)
at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:25)
To make this work, there are 3 parts of code that you need to incorporate into your code:
Create your
profileTracker
:mProfileTracker = new ProfileTracker() { @Override protected void onCurrentProfileChanged(Profile profile, Profile profile2) { updateUI(); //this is the third piece of code I will discuss below } };
Make sure you start your
profileTracker
inonCreate
as per Facebook's doc:mProfileTracker.startTracking();
Get the profile information:
private void updateUI(){ boolean enableButtons = AccessToken.getCurrentAccessToken() != null; Profile profile = Profile.getCurrentProfile(); if (profile == null) { Log.e("Profile", "null"); } if (enableButtons && profile != null) { Log.e("Access Token",AccessToken.getCurrentAccessToken().toString()); Log.e("TabSocial", profile.getName()); }
}
I discovered this after spending 3 hours this morning testing out the HelloFacebookSample app.
这篇关于无法从Facebook的个人资料信息在Android SDK中4的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!