javaandroidsingletonfacebook-sdk-3.0

Application singleton use in Android


I have a facebook initialize sdk call and I need it to initialize the moment application is launched:

I want to use my Application class to do that. for example:

public class App extends Application {

@Override
public void onCreate() {
    super.onCreate();
    FacebookSdk.sdkInitialize(getApplicationContext());
}
}

I have the main activity with the facebook login button:

public class MainActivity extends AppCompatActivity {
@BindView(R.id.login_button)
LoginButton loginButton;

private CallbackManager callbackManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);

    callbackManager = CallbackManager.Factory.create();
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {

        }

        @Override
        public void onCancel() {

        }

        @Override
        public void onError(FacebookException error) {

        }
    });
}
}

How do I call my Application singleton? How do I make its onCreate() work?


Solution

  • To make your App class singleton follow the Singleton design pattern:

    public class App
      {
        // Create the instance
        private static App instance;
        public static App getInstance()
        {
             if (instance== null) {
                    synchronized(App.class) {
                            if (instance == null)
                                    instance = new App();
                            }
                    }
                    // Return the instance
                    return instance;
        }
    
        private App()
        {
            // Constructor hidden because this is a singleton
        }
    
        public void initFBSdk()
        {
            FacebookSdk.sdkInitialize(getApplicationContext());
        }
    }
    

    Then to use it in any other class:

    App.getInstance().initFBSdk();
    

    If this is what you are asking for..