How to access private SharedPref.java method?



My SharedPref.java is as follows:

public class SharedPref  {

    private static final String PREF_NAME = "Wallet";

    private static SharedPref instance;

    private SharedPreferences preferences;

    public static SharedPref getInstance() {
        return instance;
    }

    public static void init(Context context) {
        instance = new SharedPref(context);
    }

    private SharedPref(Context context) {
        preferences = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
    }

    public void saveOAuthResponse(OAuthTokensResponse response) {
        preferences.edit()
                .putString("access", response.getAccessToken())
                .apply();
        preferences.edit()
                .putString("refresh", response.getRefreshToken())
                .apply();
    }

    public String getAccessToken() {
        return preferences.getString("access", null);
    }

    public String getRefreshToken() {
        return preferences.getString("refresh", null);
    }

    public void clearTokens() {
        preferences.edit()
                .putString("access", null)
                .apply();
        preferences.edit()
                .putString("refresh", null)
                .apply();
    }
}

I am trying to access it through an activity with this line of code:

String token = SharedPref.getInstance().getAccessToken();

and I’m getting the following error:

java.lang.NullPointerException: Attempt to invoke virtual method ‘java.lang.String com.coin.coinsway.SharedPref.getAccessToken()’ on a null object reference

How can I solve this problem?

Answer

SharedPref.instance is null, because it hasn’t been initialised. You can initialise it in your MainActivity’s onCreate method like this:

@Override
public void onCreate(Bundle savedInstanceState) {
    // ...
    SharedPref.init(this);
    // ...
}

(In case you want to access SharedPref.getInstance() in onCreate, make sure you initialise it before trying to access it)



Source: stackoverflow