MST

星途 面试题库

面试题:Flutter中SharedPreferences的复杂数据处理

假设要使用SharedPreferences存储一个包含多个用户信息(如姓名、年龄、性别)的列表数据,该如何实现?并且如何保证数据在存储和读取过程中的一致性与准确性,阐述实现思路并给出核心代码。
16.3万 热度难度
前端开发Flutter

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 数据序列化:将包含用户信息(姓名、年龄、性别)的对象进行序列化,以便能够存储到 SharedPreferences 中。可以使用 JSON 格式进行数据转换。
  2. 存储数据:将序列化后的数据以字符串形式存储到 SharedPreferences 中。
  3. 读取数据:从 SharedPreferences 中读取字符串数据,并反序列化为原始的用户信息对象列表。
  4. 保证一致性与准确性
    • 一致性:在存储和读取操作中,使用同步机制(如 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 关键字保证多线程环境下数据的一致性。同时,在反序列化后可以对数据进行进一步的业务逻辑校验来确保准确性。