Use SharedPreferences para guardar objetos de clase javaBean en Android

Hay muchas formas de guardar archivos en Android, y una de ellas es SharedPreferences, que se usa a menudo en desarrollo. Creo que los amigos que han estado en contacto con el desarrollo de Android durante un período de tiempo utilizarán el uso básico. (Incluso si no sabe cómo usarlo, Baidu también tiene muchos tutoriales de uso común).

SharedPreferences guarda los datos en forma de clave = valor; en forma de pares clave-valor. Encontrará que hay una serie de métodos put overload, todo lo que se puede almacenar son los valores de los tipos de datos básicos, y si se obtienen, también es una serie de métodos get overload para obtener el valor valor.

Entonces, la pregunta es, ¿qué debo hacer si quiero almacenar un objeto de clase java en valor? Según la API proporcionada por el sistema, no se puede almacenar.

Resolver este problema es almacenar la serialización de clases de Java en una secuencia.

Directamente en el siguiente código:

public static <T> void saveBean2Sp(Context context, T t, String fileName, String keyName) {
        SharedPreferences preferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE);
        ByteArrayOutputStream bos;
        ObjectOutputStream oos = null;
        try {
            bos = new ByteArrayOutputStream();
            oos = new ObjectOutputStream(bos);
            oos.writeObject(t);
            byte[] bytes = bos.toByteArray();
            String ObjStr = Base64.encodeToString(bytes, Base64.DEFAULT);
            SharedPreferences.Editor editor = preferences.edit();
            editor.putString(keyName, ObjStr);
            editor.commit();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (oos != null) {
                try {
                    oos.flush();
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

El método estático anterior es almacenar la clase java en SharedPreferences, el primer objeto de contexto de parámetro, el segundo parámetro necesita guardar la clase de entidad, el tercer parámetro guarda el nombre del archivo, el cuarto valor de clave de parámetro.
Nota: asegúrese de cerrar la transmisión finalmente, porque la transmisión consume muchos recursos.

public static <T extends Object> T getBeanFromSp(Context context, String fileName, String keyNme) {
        SharedPreferences preferences = context.getSharedPreferences(fileName, Context.MODE_PRIVATE);
        byte[] bytes = Base64.decode(preferences.getString(keyNme, ""), Base64.DEFAULT);
        ByteArrayInputStream bis;
        ObjectInputStream ois = null;
        T obj = null;
        try {
            bis = new ByteArrayInputStream(bytes);
            ois = new ObjectInputStream(bis);
            obj = (T) ois.readObject();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (ois != null) {
                try {
                    ois.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return obj;
    }

Este método es el método para obtener objetos de la clase Java. Solo necesita llamar al cuarto parámetro con el valor de la clave en el momento del almacenamiento para obtener el objeto almacenado.

Clase de entidad:

public class LoginModelBean implements Serializable{
    
    
    @SerializedName("loginTime")
    private String loginTime;
    @SerializedName("IP")
    private String IP;
    @SerializedName("id")
    private int id;
    @SerializedName("userId")
    private int userId;
    @SerializedName("token")
    private String token;

    public String getLoginTime() {
        return loginTime;
    }

    public void setLoginTime(String loginTime) {
        this.loginTime = loginTime;
    }

    public String getIP() {
        return IP;
    }

    public void setIP(String IP) {
        this.IP = IP;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }

Tenga en cuenta aquí: la clase de entidad debe implementar la interfaz serializable; de ​​lo contrario, informará IOException (aquí es el más fácil de olvidar, el mejor primer paso es implementar la interfaz serializable)

LoginModelBean loginModelBean = new LoginModelBean();
loginModelBean.setId(response.body().getResult().getId());
loginModelBean.setIP(response.body().getResult().getIP());
loginModelBean.setLoginTime(response.body().getResult().getLoginTime());
loginModelBean.setToken(response.body().getResult().getToken());
loginModelBean.setUserId(response.body().getResult().getUserId());
SPUtils.saveBean2Sp(mContext, loginModelBean,"loginData","loginModelBean");

Cree una clase de entidad aquí para encapsular los datos y luego llame al método saveBean2Sp () para pasar los datos.

SPUtils.getBeanFromSp(mContext, "loginData", "loginModelBean");

Simplemente llame al método anterior cuando lo saque.

Cualquier error u omisión es bienvenido para discutir.

Supongo que te gusta

Origin blog.csdn.net/qq77485042/article/details/77102157
Recomendado
Clasificación