Facebook登录在我的android应用程序中不起作用

Facebook登录在我的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

我试图在我的应用程序中实现facebook登录,但每当我启动应用程序时,它就会崩溃。我正在关注这个网站。这是我的密码

MainActivity.java

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)