多个用户的多个共享首选项,是否有必要?
Multiple sharedpreference for Multiple users, is it necessary?
我在 sharedpreference 中存储了一个数据列表,该列表只能由特定用户查看,但是当我尝试登录另一个帐户时,我仍然可以查看数据。
会不会是本地开发环境的问题,导致不同用户登录还是会读取同一个sharedpreference文件?我可以假设一旦应用程序投入生产,问题就会消失,因为用户应该使用不同的机器吗?
如果没有,我如何为多个用户实现多个共享偏好?
谢谢!
这很可能是由于您存储数据的方式所致。共享首选项取决于键 Strings
。如果您要存储不同的用户,但对所有用户使用相同的关键字,即 user
,那么它就不是唯一的。
为每个用户指定一个唯一的密钥,最简单的方法是使用他们的电子邮件。当您将该数据存储在您的共享首选项中时,请为每个用户使用这个唯一的密钥。这样你就没有数据重叠。
将 json 数据作为字符串存储到共享首选项。
然后您可以为每个用户存储唯一的键和他们的值。
这是将 json 存储为字符串的示例:(请注意,此示例适用于单个对象,适用于多个用户使用包含多个对象的数组列表)
SharedPreferences shared_User = await SharedPreferences.getInstance();
Map decode_options = jsonDecode(jsonString);
String user = jsonEncode(User.fromJson(decode_options));
shared_User.setString('user', user);
SharedPreferences shared_User = await SharedPreferences.getInstance();
Map userMap = jsonDecode(shared_User.getString('user'));
var user = User.fromJson(userMap);
class User {
final String name;
final String age;
User({this.name, this.age});
factory User.fromJson(Map<String, dynamic> parsedJson) {
return new User(
name: parsedJson['name'] ?? "",
age: parsedJson['age'] ?? "");
}
Map<String, dynamic> toJson() {
return {
"name": this.name,
"age": this.age
};
}
}
我在 sharedpreference 中存储了一个数据列表,该列表只能由特定用户查看,但是当我尝试登录另一个帐户时,我仍然可以查看数据。
会不会是本地开发环境的问题,导致不同用户登录还是会读取同一个sharedpreference文件?我可以假设一旦应用程序投入生产,问题就会消失,因为用户应该使用不同的机器吗?
如果没有,我如何为多个用户实现多个共享偏好?
谢谢!
这很可能是由于您存储数据的方式所致。共享首选项取决于键 Strings
。如果您要存储不同的用户,但对所有用户使用相同的关键字,即 user
,那么它就不是唯一的。
为每个用户指定一个唯一的密钥,最简单的方法是使用他们的电子邮件。当您将该数据存储在您的共享首选项中时,请为每个用户使用这个唯一的密钥。这样你就没有数据重叠。
将 json 数据作为字符串存储到共享首选项。
然后您可以为每个用户存储唯一的键和他们的值。
这是将 json 存储为字符串的示例:(请注意,此示例适用于单个对象,适用于多个用户使用包含多个对象的数组列表)
SharedPreferences shared_User = await SharedPreferences.getInstance();
Map decode_options = jsonDecode(jsonString);
String user = jsonEncode(User.fromJson(decode_options));
shared_User.setString('user', user);
SharedPreferences shared_User = await SharedPreferences.getInstance();
Map userMap = jsonDecode(shared_User.getString('user'));
var user = User.fromJson(userMap);
class User {
final String name;
final String age;
User({this.name, this.age});
factory User.fromJson(Map<String, dynamic> parsedJson) {
return new User(
name: parsedJson['name'] ?? "",
age: parsedJson['age'] ?? "");
}
Map<String, dynamic> toJson() {
return {
"name": this.name,
"age": this.age
};
}
}