Facebook登录在我的android应用程序中不起作用
我试图在我的应用程序中实现facebook登录,但每当我启动应用程序时,它就会崩溃。我正在关注这个网站。这是我的密码 MainActivity.javaFacebook登录在我的android应用程序中不起作用,android,facebook-login,Android,Facebook Login,我试图在我的应用程序中实现facebook登录,但每当我启动应用程序时,它就会崩溃。我正在关注这个网站。这是我的密码 MainActivity.java package com.algor7.samplelogin; ... public class MainActivity extends Activity { private LoginButton loginButton; private CallbackManager callbackManager; private AccessTok
package com.algor7.samplelogin;
...
public class MainActivity extends Activity {
private LoginButton loginButton;
private CallbackManager callbackManager;
private AccessTokenTracker accessTokenTracker;
private AccessToken accessToken;
private ProfileTracker profileTracker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FacebookSdk.sdkInitialize(this.getApplicationContext());
callbackManager = CallbackManager.Factory.create();
accessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(
AccessToken oldAccessToken,
AccessToken currentAccessToken) {
// Set the access token using
// currentAccessToken when it's loaded or set.
}
};
// If the access token is available already assign it.
accessToken = AccessToken.getCurrentAccessToken();
profileTracker = new ProfileTracker() {
@Override
protected void onCurrentProfileChanged(
Profile oldProfile,
Profile currentProfile) {
// App code
}
};
loginButton.findViewById(R.id.login_button);
loginButton.setReadPermissions("email");
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onDestroy() {
super.onDestroy();
accessTokenTracker.stopTracking();
profileTracker.stopTracking();
}
}
build.gradle(模块:应用程序)
日志:
--------- beginning of crash
05-16 15:28:57.915 2478-2478/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.algor7.samplelogin, PID: 2478
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.algor7.samplelogin/com.algor7.samplelogin.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View com.facebook.login.widget.LoginButton.findViewById(int)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View com.facebook.login.widget.LoginButton.findViewById(int)' on a null object reference
at com.algor7.samplelogin.MainActivity.onCreate(MainActivity.java:54)
at android.app.Activity.performCreate(Activity.java:6251)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
请帮我解决这个问题。提前谢谢 尝试这样做:
Try to do like this:
public class MainActivity extends Activity {
private CallbackManager mfbCallbackManager;
private LoginManager mfbLoginManager;
Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
setContentView(R.layout. activity_main);
mfbCallbackManager = CallbackManager.Factory.create();
mfbLoginManager = LoginManager.getInstance();
mfbLoginManager.registerCallback(mfbCallbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult fbLoginResult) {
GraphRequest fbGraphRequest = GraphRequest.newMeRequest(fbLoginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
Profile fbProfile = Profile.getCurrentProfile();
String email = null, gender = null, dob = null;
try {
email = object.getString("email");
gender = object.getString("gender");
dob = object.getString("birthday");
} catch (JSONException e) {
AppUtil.writeLog(TAG, e.getMessage());
}
mCustomer = new Customer();
try {
mCustomer.setCustFbId(fbProfile.getId());
mCustomer.setCustName(fbProfile.getName());
mCustomer.setCustFbiImageUrl(fbProfile.getProfilePictureUri(Constants.FB_PROFILE_PIC_WIDTH, Constants.FB_PROFILE_PIC_HEIGHT).toString());
mCustomer.setCustEmail(email);
mCustomer.setCustGender(gender);
mCustomer.setCustType(Constants.CUSTOMER_ROLE);
mCustomer.setCustDob(dob);
} catch (NullPointerException e) {
AppUtil.writeLog(TAG, e.getMessage());
}
loginWithFb();
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "gender, age_range, email, birthday");
fbGraphRequest.setParameters(parameters);
fbGraphRequest.executeAsync();
}
private void loginWithFb() {
EndpointInterface apiService = AppUtil.getRetrofitInstance().create(EndpointInterface.class);
Call<LoginResp> call = apiService.loinWithFacebook(
mCustomer.getCustFbId(),
mCustomer.getCustName(),
mCustomer.getCustType(),
mCustomer.getCustFbiImageUrl(),
mCustomer.getCustEmail(),
mCustomer.getCustDob(),
mCustomer.getCustGender(),
mAppPreferences.getString(Constants.SETTINGS_GCM_ID, ""),
IS_PUSH_ENABLED
);
final ProgressDialog dialog;
dialog = new ProgressDialog(LoginActivity.this);
dialog.setMessage(getString(R.string.fb_login_wait_msg));
dialog.setCanceledOnTouchOutside(false);
dialog.show();
call.enqueue(new Callback<LoginResp>() {
@Override
public void onResponse(Call<LoginResp> call, Response<LoginResp> response) {
mCustomer.setCustId(response.body().getCustId());
mCustomer.setIsNew(response.body().getIsNew());
SharedPreferences.Editor preferenceEditor = mAppPreferences.edit();
preferenceEditor.putString(Constants.SETTINGS_OBJ_CUSTOMER, new Gson().toJson(mCustomer));
preferenceEditor.putBoolean(Constants.SETTINGS_IS_LOGGED_IN, true);
preferenceEditor.apply();
dialog.dismiss();
startActivity(new Intent(LoginActivity.this, HomeActivity.class));
finish();
}
@Override
public void onFailure(Call<LoginResp> call, Throwable t) {
dialog.dismiss();
Toast.makeText(LoginActivity.this, R.string.server_error + t.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
公共类MainActivity扩展了活动{
专用CallbackManager mfbCallbackManager;
私有登录管理器mfbLoginManager;
推翻
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
sdkinInitialize(getApplicationContext());
setContentView(R.layout.activity_main);
mfbCallbackManager=CallbackManager.Factory.create();
mfbLoginManager=LoginManager.getInstance();
registerCallback(mfbCallbackManager,newfacebookcallback()){
@凌驾
成功时公共无效(LoginResult fbLoginResult){
GraphRequest fbGraphRequest=GraphRequest.NewMereRequest(fbLoginResult.getAccessToken(),new GraphRequest.GraphJSONObjectCallback()){
@凌驾
未完成公共无效(JSONObject对象,GraphResponse响应){
Profile fbProfile=Profile.getCurrentProfile();
字符串email=null,性别=null,dob=null;
试一试{
email=object.getString(“email”);
性别=object.getString(“性别”);
dob=object.getString(“生日”);
}捕获(JSONException e){
writeLog(标记,例如getMessage());
}
mccustomer=新客户();
试一试{
mccustomer.setCustFbId(fbProfile.getId());
mccustomer.setCustName(fbProfile.getName());
mCustomer.setCustFbiImageUrl(fbProfile.getProfilePictureUri(Constants.FB_PROFILE_picu WIDTH,Constants.FB_PROFILE_picu HEIGHT).toString();
mccustomer.setCustEmail(电子邮件);
mccustomer.setcustender(性别);
mccustomer.setcustype(常量.CUSTOMER\u角色);
mccustomer.setCustDob(dob);
}捕获(NullPointerException e){
writeLog(标记,例如getMessage());
}
loginWithFb();
}
});
Bundle参数=新Bundle();
参数.putString(“字段”、“性别、年龄范围、电子邮件、生日”);
fbGraphRequest.setParameters(参数);
fbGraphRequest.executeAsync();
}
私有void loginWithFb(){
EndpointInterface apiService=AppUtil.getRefughtInstance().create(EndpointInterface.class);
Call Call=apiService.loinWithFacebook(
mCustomer.getCustFbId(),
mCustomer.getCustName(),
mCustomer.getCustType(),
mCustomer.getCustFbiImageUrl(),
mCustomer.getCustEmail(),
mCustomer.getCustDob(),
mCustomer.getcustsgender(),
mappreferences.getString(Constants.SETTINGS\u GCM\u ID,“”),
是否启用了推送功能
);
最终进程对话框;
dialog=新建ProgressDialog(LoginActivity.this);
setMessage(getString(R.string.fb_login_wait_msg));
对话框。setCanceledOnTouchOutside(false);
dialog.show();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
setCustId(response.body().getCustId());
mCustomer.setIsNew(response.body().getIsNew());
SharedPreferences.Editor preferenceEditor=mAppPreferences.edit();
preferenceEditor.putString(Constants.SETTINGS_OBJ_CUSTOMER,new Gson().toJson(mCustomer));
preferenceEditor.putBoolean(Constants.SETTINGS\u已登录,true);
preferenceEditor.apply();
dialog.dismise();
startActivity(新意图(LoginActivity.this、HomeActivity.class));
完成();
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
dialog.dismise();
Toast.makeText(LoginActivity.this,R.string.server_error+t.getMessage(),Toast.LENGTH_LONG.show();
}
});
}
而不是
loginButton.findViewById(R.id.login_button);
使用
问题是
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View com.facebook.login.widget.LoginButton.findViewById(int)' on a null object reference
at com.algor7.samplelogin.MainActivity.onCreate(MainActivity.java:54)
什么意思是
loginButton
为null
。您试图在loginButton
中找到尚未初始化的视图login\u按钮。您必须在活动中找到视图。您应该在片段中而不是在活动中进行登录。如果我没有错,请cebook doc要求您将登录按钮放在一个片段中。
发布您的Logcat
的某些部分。您的实际错误是什么getting@Algor7.Is这是一个空指针异常。是的,大多数都是空指针异常。@jaydroider抱歉,它不起作用。logcat表示执行方法后的错误,但它没有准确指出哪一行出现了错误,或者我不是g设置它。@Algor7你是否正确地使应用程序在Facebook中可见?请参阅此处以使用你提供的最新fb api完整代码。这无关紧要。他不会从这段代码中学到任何东西,而是不知道他的代码中存在什么问题。只提供
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.algor7.samplelogin"
minSdkVersion 17
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:24.0.0-alpha2'
compile 'com.facebook.android:facebook-android-sdk:[4,5)'
}
--------- beginning of crash
05-16 15:28:57.915 2478-2478/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.algor7.samplelogin, PID: 2478
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.algor7.samplelogin/com.algor7.samplelogin.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View com.facebook.login.widget.LoginButton.findViewById(int)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View com.facebook.login.widget.LoginButton.findViewById(int)' on a null object reference
at com.algor7.samplelogin.MainActivity.onCreate(MainActivity.java:54)
at android.app.Activity.performCreate(Activity.java:6251)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Try to do like this:
public class MainActivity extends Activity {
private CallbackManager mfbCallbackManager;
private LoginManager mfbLoginManager;
Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
setContentView(R.layout. activity_main);
mfbCallbackManager = CallbackManager.Factory.create();
mfbLoginManager = LoginManager.getInstance();
mfbLoginManager.registerCallback(mfbCallbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult fbLoginResult) {
GraphRequest fbGraphRequest = GraphRequest.newMeRequest(fbLoginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
Profile fbProfile = Profile.getCurrentProfile();
String email = null, gender = null, dob = null;
try {
email = object.getString("email");
gender = object.getString("gender");
dob = object.getString("birthday");
} catch (JSONException e) {
AppUtil.writeLog(TAG, e.getMessage());
}
mCustomer = new Customer();
try {
mCustomer.setCustFbId(fbProfile.getId());
mCustomer.setCustName(fbProfile.getName());
mCustomer.setCustFbiImageUrl(fbProfile.getProfilePictureUri(Constants.FB_PROFILE_PIC_WIDTH, Constants.FB_PROFILE_PIC_HEIGHT).toString());
mCustomer.setCustEmail(email);
mCustomer.setCustGender(gender);
mCustomer.setCustType(Constants.CUSTOMER_ROLE);
mCustomer.setCustDob(dob);
} catch (NullPointerException e) {
AppUtil.writeLog(TAG, e.getMessage());
}
loginWithFb();
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "gender, age_range, email, birthday");
fbGraphRequest.setParameters(parameters);
fbGraphRequest.executeAsync();
}
private void loginWithFb() {
EndpointInterface apiService = AppUtil.getRetrofitInstance().create(EndpointInterface.class);
Call<LoginResp> call = apiService.loinWithFacebook(
mCustomer.getCustFbId(),
mCustomer.getCustName(),
mCustomer.getCustType(),
mCustomer.getCustFbiImageUrl(),
mCustomer.getCustEmail(),
mCustomer.getCustDob(),
mCustomer.getCustGender(),
mAppPreferences.getString(Constants.SETTINGS_GCM_ID, ""),
IS_PUSH_ENABLED
);
final ProgressDialog dialog;
dialog = new ProgressDialog(LoginActivity.this);
dialog.setMessage(getString(R.string.fb_login_wait_msg));
dialog.setCanceledOnTouchOutside(false);
dialog.show();
call.enqueue(new Callback<LoginResp>() {
@Override
public void onResponse(Call<LoginResp> call, Response<LoginResp> response) {
mCustomer.setCustId(response.body().getCustId());
mCustomer.setIsNew(response.body().getIsNew());
SharedPreferences.Editor preferenceEditor = mAppPreferences.edit();
preferenceEditor.putString(Constants.SETTINGS_OBJ_CUSTOMER, new Gson().toJson(mCustomer));
preferenceEditor.putBoolean(Constants.SETTINGS_IS_LOGGED_IN, true);
preferenceEditor.apply();
dialog.dismiss();
startActivity(new Intent(LoginActivity.this, HomeActivity.class));
finish();
}
@Override
public void onFailure(Call<LoginResp> call, Throwable t) {
dialog.dismiss();
Toast.makeText(LoginActivity.this, R.string.server_error + t.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
loginButton.findViewById(R.id.login_button);
findViewById(R.id.login_button);
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View com.facebook.login.widget.LoginButton.findViewById(int)' on a null object reference
at com.algor7.samplelogin.MainActivity.onCreate(MainActivity.java:54)