面试题答案
一键面试实现思路
- 数据序列化:将包含用户信息(姓名、年龄、性别)的对象进行序列化,以便能够存储到
SharedPreferences
中。可以使用JSON
格式进行数据转换。 - 存储数据:将序列化后的数据以字符串形式存储到
SharedPreferences
中。 - 读取数据:从
SharedPreferences
中读取字符串数据,并反序列化为原始的用户信息对象列表。 - 保证一致性与准确性:
- 一致性:在存储和读取操作中,使用同步机制(如
synchronized
关键字)来确保在多线程环境下数据的一致性,避免数据竞争。 - 准确性:在序列化和反序列化过程中,对数据进行严格的校验,确保数据格式正确。同时,在读取数据后,可以进行一些简单的业务逻辑校验,比如年龄是否在合理范围等。
- 一致性:在存储和读取操作中,使用同步机制(如
核心代码
定义用户信息类
import java.io.Serializable;
public class User implements Serializable {
private String name;
private int age;
private String gender;
public User(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getGender() {
return gender;
}
}
存储数据
import android.content.Context;
import android.content.SharedPreferences;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
public class UserPreferences {
private static final String PREF_NAME = "user_preferences";
private static final String KEY_USER_LIST = "user_list";
private final SharedPreferences sharedPreferences;
public UserPreferences(Context context) {
sharedPreferences = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
}
public synchronized void saveUserList(List<User> userList) {
Gson gson = new Gson();
String json = gson.toJson(userList);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(KEY_USER_LIST, json);
editor.apply();
}
}
读取数据
import android.content.Context;
import android.content.SharedPreferences;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
public class UserPreferences {
private static final String PREF_NAME = "user_preferences";
private static final String KEY_USER_LIST = "user_list";
private final SharedPreferences sharedPreferences;
public UserPreferences(Context context) {
sharedPreferences = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
}
public synchronized List<User> getUserList() {
String json = sharedPreferences.getString(KEY_USER_LIST, null);
if (json == null) {
return new ArrayList<>();
}
Gson gson = new Gson();
Type type = new TypeToken<List<User>>() {
}.getType();
return gson.fromJson(json, type);
}
}
上述代码使用 Gson
库进行 JSON
序列化和反序列化,通过 SharedPreferences
存储和读取包含多个用户信息的列表数据,并通过 synchronized
关键字保证多线程环境下数据的一致性。同时,在反序列化后可以对数据进行进一步的业务逻辑校验来确保准确性。