usuario usar studio sirve sesion que para guardar getsharedpreferences example contraseña como android sharedpreferences

android - usar - sharedpreferences editor



Cómo Android SharedPreferences guarda/almacena objetos (12)

Necesitamos obtener objetos de usuario en muchos lugares, que contienen muchos campos. Después de iniciar sesión, quiero guardar / almacenar estos objetos de usuario. ¿Cómo podemos implementar este tipo de escenario?

No puedo almacenarlo así:

SharedPreferences.Editor prefsEditor = myPrefs.edit(); prefsEditor.putString("BusinessUnit", strBusinessUnit);


Mejor es hacer una clase global de Constants para guardar claves o variables para recuperar o guardar datos.

Para guardar datos, llame a este método para guardar datos de todas partes.

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

Úselo para obtener datos.

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

y un método como este hará el truco

public static User getUserInfo(Context con) { String id = getData(con, Constants.USER_ID, null); String name = getData(con, Constants.USER_NAME, null); if(id != null && name != null) { User user = new User(); //Hope you will have a user Object. user.setId(id); user.setName(name); //Here set other credentials. return user; } else return null; }


Mira aquí, esto puede ayudarte:

public static boolean setObject(Context context, Object o) { Field[] fields = o.getClass().getFields(); SharedPreferences sp = context.getSharedPreferences(o.getClass() .getName(), Context.MODE_PRIVATE); Editor editor = sp.edit(); for (int i = 0; i < fields.length; i++) { Class<?> type = fields[i].getType(); if (isSingle(type)) { try { final String name = fields[i].getName(); if (type == Character.TYPE || type.equals(String.class)) { Object value = fields[i].get(o); if (null != value) editor.putString(name, value.toString()); } else if (type.equals(int.class) || type.equals(Short.class)) editor.putInt(name, fields[i].getInt(o)); else if (type.equals(double.class)) editor.putFloat(name, (float) fields[i].getDouble(o)); else if (type.equals(float.class)) editor.putFloat(name, fields[i].getFloat(o)); else if (type.equals(long.class)) editor.putLong(name, fields[i].getLong(o)); else if (type.equals(Boolean.class)) editor.putBoolean(name, fields[i].getBoolean(o)); } catch (IllegalAccessException e) { LogUtils.e(TAG, e); } catch (IllegalArgumentException e) { LogUtils.e(TAG, e); } } else { // FIXME 是对象则不写入 } } return editor.commit(); }

https://github.com/AltasT/PreferenceVObjectFile/blob/master/PreferenceVObjectFile/src/com/altas/lib/PreferenceUtils.java


No ha indicado lo que hace con el objeto prefsEditor después de esto, pero para poder conservar los datos de preferencia, también debe usar:

prefsEditor.commit();


Otra forma de guardar y restaurar un objeto desde las preferencias compartidas de Android sin usar el formato Json

private static ExampleObject getObject(Context c,String db_name){ SharedPreferences sharedPreferences = c.getSharedPreferences(db_name, Context.MODE_PRIVATE); ExampleObject o = new ExampleObject(); Field[] fields = o.getClass().getFields(); try { for (Field field : fields) { Class<?> type = field.getType(); try { final String name = field.getName(); if (type == Character.TYPE || type.equals(String.class)) { field.set(o,sharedPreferences.getString(name, "")); } else if (type.equals(int.class) || type.equals(Short.class)) field.setInt(o,sharedPreferences.getInt(name, 0)); else if (type.equals(double.class)) field.setDouble(o,sharedPreferences.getFloat(name, 0)); else if (type.equals(float.class)) field.setFloat(o,sharedPreferences.getFloat(name, 0)); else if (type.equals(long.class)) field.setLong(o,sharedPreferences.getLong(name, 0)); else if (type.equals(Boolean.class)) field.setBoolean(o,sharedPreferences.getBoolean(name, false)); else if (type.equals(UUID.class)) field.set( o, UUID.fromString( sharedPreferences.getString( name, UUID.nameUUIDFromBytes("".getBytes()).toString() ) ) ); } catch (IllegalAccessException e) { Log.e(StaticConfig.app_name, "IllegalAccessException", e); } catch (IllegalArgumentException e) { Log.e(StaticConfig.app_name, "IllegalArgumentException", e); } } } catch (Exception e) { System.out.println("Exception: " + e); } return o; } private static void setObject(Context context, Object o, String db_name) { Field[] fields = o.getClass().getFields(); SharedPreferences sp = context.getSharedPreferences(db_name, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); for (Field field : fields) { Class<?> type = field.getType(); try { final String name = field.getName(); if (type == Character.TYPE || type.equals(String.class)) { Object value = field.get(o); if (value != null) editor.putString(name, value.toString()); } else if (type.equals(int.class) || type.equals(Short.class)) editor.putInt(name, field.getInt(o)); else if (type.equals(double.class)) editor.putFloat(name, (float) field.getDouble(o)); else if (type.equals(float.class)) editor.putFloat(name, field.getFloat(o)); else if (type.equals(long.class)) editor.putLong(name, field.getLong(o)); else if (type.equals(Boolean.class)) editor.putBoolean(name, field.getBoolean(o)); else if (type.equals(UUID.class)) editor.putString(name, field.get(o).toString()); } catch (IllegalAccessException e) { Log.e(StaticConfig.app_name, "IllegalAccessException", e); } catch (IllegalArgumentException e) { Log.e(StaticConfig.app_name, "IllegalArgumentException", e); } } editor.apply(); }


Para agregar a la respuesta de @ MuhammadAamirALi, puede usar Gson para guardar y recuperar una lista de objetos

Guardar lista de objetos definidos por el usuario en SharedPreferences

public static final String KEY_CONNECTIONS = "KEY_CONNECTIONS"; SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit(); User entity = new User(); // ... set entity fields List<Connection> connections = entity.getConnections(); // convert java object to JSON format, // and returned as JSON formatted string String connectionsJSONString = new Gson().toJson(connections); editor.putString(KEY_CONNECTIONS, connectionsJSONString); editor.commit();

Obtener una lista de objetos definidos por el usuario desde SharedPreferences

String connectionsJSONString = getPreferences(MODE_PRIVATE).getString(KEY_CONNECTIONS, null); Type type = new TypeToken < List < Connection >> () {}.getType(); List < Connection > connections = new Gson().fromJson(connectionsJSONString, type);


Prueba esta mejor manera:

PreferenceConnector.java

import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; public class PreferenceConnector { public static final String PREF_NAME = "ENUMERATOR_PREFERENCES"; public static final String PREF_NAME_REMEMBER = "ENUMERATOR_REMEMBER"; public static final int MODE = Context.MODE_PRIVATE; public static final String name = "name"; public static void writeBoolean(Context context, String key, boolean value) { getEditor(context).putBoolean(key, value).commit(); } public static boolean readBoolean(Context context, String key, boolean defValue) { return getPreferences(context).getBoolean(key, defValue); } public static void writeInteger(Context context, String key, int value) { getEditor(context).putInt(key, value).commit(); } public static int readInteger(Context context, String key, int defValue) { return getPreferences(context).getInt(key, defValue); } public static void writeString(Context context, String key, String value) { getEditor(context).putString(key, value).commit(); } public static String readString(Context context, String key, String defValue) { return getPreferences(context).getString(key, defValue); } public static void writeLong(Context context, String key, long value) { getEditor(context).putLong(key, value).commit(); } public static long readLong(Context context, String key, long defValue) { return getPreferences(context).getLong(key, defValue); } public static SharedPreferences getPreferences(Context context) { return context.getSharedPreferences(PREF_NAME, MODE); } public static Editor getEditor(Context context) { return getPreferences(context).edit(); } }

Escribe el valor:

PreferenceConnector.writeString(this, PreferenceConnector.name,"Girish");

Y obtener valor usando:

String name= PreferenceConnector.readString(this, PreferenceConnector.name, "");


Puede guardar objetos en preferencias sin usar ninguna biblioteca, primero que nada su clase de objetos debe implementar Serializable:

public class callModel implements Serializable { private long pointTime; private boolean callisConnected; public callModel(boolean callisConnected, long pointTime) { this.callisConnected = callisConnected; this.pointTime = pointTime; } public boolean isCallisConnected() { return callisConnected; } public long getPointTime() { return pointTime; }

}

Entonces puede usar fácilmente estos dos métodos para convertir objetos en cadenas y cadenas en objetos:

public static <T extends Serializable> T stringToObjectS(String string) { byte[] bytes = Base64.decode(string, 0); T object = null; try { ObjectInputStream objectInputStream = new ObjectInputStream(new ByteArrayInputStream(bytes)); object = (T) objectInputStream.readObject(); } catch (Exception e) { e.printStackTrace(); } return object; } public static String objectToString(Parcelable object) { String encoded = null; try { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); objectOutputStream.writeObject(object); objectOutputStream.close(); encoded = new String(Base64.encodeToString(byteArrayOutputStream.toByteArray(), 0)); } catch (IOException e) { e.printStackTrace(); } return encoded; }

Ahorrar:

SharedPreferences mPrefs = getPreferences(MODE_PRIVATE); Editor prefsEditor = mPrefs.edit(); prefsEditor.putString("MyObject", objectToString(callModelObject)); prefsEditor.commit();

Leer

String value= mPrefs.getString("MyObject", ""); MyObject obj = stringToObjectS(value);


Puede usar gson.jar para almacenar objetos de clase en SharedPreferences . Puedes descargar este jar de google-gson

O agregue la dependencia GSON en el archivo Gradle:

compile ''com.google.code.gson:gson:2.7''

Creando una preferencia compartida:

SharedPreferences mPrefs = getPreferences(MODE_PRIVATE);

Ahorrar:

Editor prefsEditor = mPrefs.edit(); Gson gson = new Gson(); String json = gson.toJson(MyObject); prefsEditor.putString("MyObject", json); prefsEditor.commit();

Para recuperar:

Gson gson = new Gson(); String json = mPrefs.getString("MyObject", ""); MyObject obj = gson.fromJson(json, MyObject.class);


Sé que este hilo es un poco viejo. Pero voy a publicar esto de todos modos con la esperanza de que pueda ayudar a alguien. Podemos almacenar campos de cualquier objeto a preferencia compartida serializando el objeto en Cadena. Aquí he usado GSON para almacenar cualquier objeto a preferencia compartida.

Guardar Objeto para Preferencia:

public static void saveObjectToSharedPreference(Context context, String preferenceFileName, String serializedObjectKey, Object object) { SharedPreferences sharedPreferences = context.getSharedPreferences(preferenceFileName, 0); SharedPreferences.Editor sharedPreferencesEditor = sharedPreferences.edit(); final Gson gson = new Gson(); String serializedObject = gson.toJson(object); sharedPreferencesEditor.putString(serializedObjectKey, serializedObject); sharedPreferencesEditor.apply(); }

Recuperar objeto de preferencia:

public static <GenericClass> GenericClass getSavedObjectFromPreference(Context context, String preferenceFileName, String preferenceKey, Class<GenericClass> classType) { SharedPreferences sharedPreferences = context.getSharedPreferences(preferenceFileName, 0); if (sharedPreferences.contains(preferenceKey)) { final Gson gson = new Gson(); return gson.fromJson(sharedPreferences.getString(preferenceKey, ""), classType); } return null; }

Nota :

Recuerde agregar compile ''com.google.code.gson:gson:2.6.2'' a dependencies en su gradle.

Ejemplo :

//assume SampleClass exists SampleClass mObject = new SampleObject(); //to store an object saveObjectToSharedPreference(context, "mPreference", "mObjectKey", mObject); //to retrive object stored in preference mObject = getSavedObjectFromPreference(context, "mPreference", "mObjectKey", SampleClass.class);

Feliz Codificación!


Si desea almacenar todo el Objeto que obtiene en respuesta, puede lograrlo haciendo algo como:

Primero crea un método que convierta tu JSON en una cadena en tu clase de utilidades como se muestra a continuación.

public static <T> T fromJson(String jsonString, Class<T> theClass) { return new Gson().fromJson(jsonString, theClass); }

Luego, en clase de preferencias compartidas, haga algo como,

`public void storeLoginResponse (yourResponseClass objName) {

String loginJSON = UtilClass.toJson(customer); if (!TextUtils.isEmpty(customerJSON)) { editor.putString(AppConst.PREF_CUSTOMER, customerJSON); editor.commit(); } }`

y luego crea un método para getPreferences

public Customer getCustomerDetails() { String customerDetail = pref.getString(AppConst.PREF_CUSTOMER, null); if (!TextUtils.isEmpty(customerDetail)) { return GSONConverter.fromJson(customerDetail, Customer.class); } else { return new Customer(); } }

Luego, simplemente llame al primer método cuando obtenga una respuesta y segundo cuando necesite obtener datos de las preferencias compartidas, como

String token = SharedPrefHelper.get().getCustomerDetails().getAccessToken();

eso es todo.

Espero que te ayude..!!



Paso 1: Copia y pega estas dos funciones en tu archivo java.

public void setDefaults(String key, String value, Context context) { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor editor = preferences.edit(); editor.putString(key, value); editor.commit(); } public static String getDefaults(String key, Context context) { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); return preferences.getString(key, null); }

Paso 2: para guardar el uso:

setDefaults("key","value",this);

para recuperar el uso:

String retrieve= getDefaults("key",this);

Puede establecer diferentes preferencias compartidas usando diferentes nombres de teclas, como:

setDefaults("key1","xyz",this); setDefaults("key2","abc",this); setDefaults("key3","pqr",this);