【发布时间】:2020-11-28 00:49:29
【问题描述】:
我正在尝试保存从sql中拖出的列表以保存在SharedPreferences中,我尝试使用此代码:
static Future<List<User>> getUsers() async {
final myUserId = await getUser();
try {
var myUser = myUserId;
var map = Map<String, dynamic>();
map['user'] = myUser;
final response = await http.post(ROOT, body: map);
//print('getUsers Response: ${response.body}');
//print(myUser);
if (200 == response.statusCode) {
List<User> listContacts = parseResponse(response.body);
SharedPreferences contacts = await SharedPreferences.getInstance();
contacts.setStringList('contacts', listContacts);
return listContacts;
} else {
return List<User>();
}
} catch (e) {
return List<User>(); // return an empty list on exception/error
}
}
列表的User 类如下:
class User {
final String firstName;
final String lastName;
final String imageLink;
User({this.firstName, this.lastName, this.imageLink});
factory User.fromJson(Map<String, dynamic> json) {
return User(
firstName: json['firstName'] as String,
lastName: json['lastName'] as String,
imageLink: json['imageLink'] as String,
);
}
}
所以基本上数据已成功从数据库中提取出来,并且确实显示了它,但我想将数据保存到SharedPreferences,因此不必每次都加载。发生的错误是listContacts 不能分配给setStringList,因为它是List<User> 而不是List<String>,但我不知道我还能如何按顺序更改代码能够设置SharedPreferences。
【问题讨论】:
-
你可以试试
contacts.setString('contacts',json.encode(listcontacts))我正在做的是再次将其编码为 json 格式,你也可以保存你的 json 响应,然后使用你的类提取它 -
@Krish Bhanushali,它确实按照你说的方式工作。但是存储后如何才能再次使用呢?以及如何将其设置为地图?
-
请查看this