Il existe de nombreuses façons d'enregistrer des fichiers sur Android, et l'une d'entre elles est SharedPreferences, qui est souvent utilisée dans le développement. Je crois que les amis qui ont été en contact avec le développement Android pendant un certain temps utiliseront l'utilisation de base. (Même si vous ne savez pas comment l'utiliser, Baidu propose également de nombreux tutoriels d'utilisation courants).
SharedPreferences enregistre les données sous la forme Clé = valeur; sous la forme de paires clé-valeur. Vous constaterez qu'il existe une série de méthodes de surcharge put, tout ce qui peut être stocké sont les valeurs de valeur des types de données de base, et si elles sont obtenues, c'est aussi une série de méthodes de surcharge pour obtenir la valeur de la valeur.
La question est donc: que dois-je faire si je veux stocker un objet de classe java en valeur? Selon l'API fournie par le système, il ne peut pas être stocké.
Pour résoudre ce problème, il faut stocker la sérialisation des classes java dans un flux.
Directement sur le code ci-dessous:
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();
}
}
}
}
La méthode statique ci-dessus consiste à stocker la classe java dans SharedPreferences, le premier objet de contexte de paramètre, le deuxième paramètre doit enregistrer la classe d'entité, le troisième paramètre enregistrer le nom de fichier, la quatrième valeur de clé de paramètre.
Remarque: assurez-vous de fermer le flux enfin, car le flux est très gourmand en ressources.
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;
}
Cette méthode est la méthode d'obtention des objets de classe Java. Il vous suffit d'appeler le quatrième paramètre avec la valeur de clé au moment du stockage pour obtenir l'objet stocké.
Classe d'entité:
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;
}
Remarquez ici: la classe d'entité doit implémenter l'interface Serializable, sinon elle rapportera IOException (voici la plus simple à oublier, la meilleure première étape est d'implémenter l'interface 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");
Ici, nous créons une classe d'entité pour encapsuler les données, puis appelons la méthode saveBean2Sp () pour transmettre les données.
SPUtils.getBeanFromSp(mContext, "loginData", "loginModelBean");
Appelez simplement la méthode ci-dessus lors du retrait.
Toute erreur ou omission est la bienvenue pour en discuter.