Android: guarde Object en SharedPreferences y llévelo a cualquier lugar de la aplicación

En mi aplicación tengo una costumbreUser clase que contiene algunos datos regulares (nombre, etc.). Necesito guardar ese objeto y obtenerlo en cualquier lugar y en cualquier momento en otras páginas de la aplicación. Hice una clase de ayudapublic final class GeneralMethods con muchos métodos que uso mucho (estáticos, por supuesto).
Para guardar los datos estoy usandoGson biblioteca. Hice este método:

public static void saveData(Context con, String variable, String data)
{
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(con);
    prefs.edit().putString(variable, data).apply();
}

Para guardar un objeto, uso este método de la siguiente manera:

Gson gson = new Gson();
String stringUser = gson.toJson(newUser);    
GeneralMethods.saveData(VerificationActivity.this,"userObject",stringUser);

Para volver a cargar los datos, estoy usando este método estático:

public static String getData(Context con, String variable, String defaultValue)
{
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(con);
    String data = prefs.getString(variable, defaultValue);
    return data;
}

Realmente no sé cómo recuperar los datos, esto es lo que he hecho hasta ahora:

Gson gson = new Gson();
String user="";
String value="";
user = GeneralMethods.getData(SplashScreenActivity.this,value,"userObject");

Estoy luchando con elgetData método, ¿cómo analizo los datos deString de vuelta aUser ¿tipo?


EDITAR
Intenté las sugerencias a continuación y siempre reciboNULL. ¿Quizás no guardo el objeto de la manera correcta?


EDIT2
Parece que no estoy generando el objeto correctamente y, por lo tanto, no se está guardando nada. Esta es la clase de usuario "Singleton":

public class User implements Serializable {

    private static User userInstance=null; //the only instance of the class
    private static String userName; //userName = the short phone number
    private User(){}

    public static User getInstance(){
        if(userInstance ==null){
            userInstance = new User();
        }
        return userInstance;
    }

    public static User getUserInstance() {
        return userInstance;
    }

    public String getUserName(){
        return this.userName;
    }

    public static void setUserName(String userName) {
        User.userName = userName;
    }

    public static void init(String _userName) {
        User.setUserName(_userName);
    }
}

Así es como configuro el objeto con los datos relevantes (nombre de usuario como parámetro del constructor):

   User.init(name);

Así es como convierto el objeto en unString:

   Gson gson = new Gson();
    String stringUser = gson.toJson(User.getInstance());
GeneralMethods.saveData(VerificationActivity.this,"userObject",stringUser);

Respuestas a la pregunta(8)

Su respuesta a la pregunta