flutter - 从 JSON 值解码时如何删除引号和符号?扑
问题描述
这是获取我的身份验证令牌的代码。
Future <String> getToken() async{
final SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getString('token');
}
当我打印令牌时,它会给我这个带有双引号的 json 值。
I/flutter (14710): "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiIxIiwianRpIjoiZDQzZjFjNWZjZDQxYjIzYzllNGU2ZWIyZjQ1M2FmZDgwOTJiNGZmNDAyYjI0OTBmM2RiYTUzMTgzYTU2ODZjNTNiNzVmMDY3ZmIzMmNjMjUiLCJpYXQiOjE1OTA0MDg2NjksIm5iZiI6MTU5MDQwODY2OSwiZXhwIjoxNjIxOTQ0NjY5LCJzdWIiOiIxIiwic2NvcGVzIjpbXX0.3YYdR8P1_XzK--VLAwT5gxmkyLZPMuvQhzQQ5OOl_nv0jriPwFY9sqHdL_wiqpAA5vtgBOnyAwZ2kSI_BgDzsKZzY2vMVa47Tyuz87uEFZ7-aHYvNY_r4T_gIkwAuLwc8qN2kuytFjEtuq-iQUiWgEzp5y2n3BDlzXZ7rZi5Xp1_y_6_ysII9RQtX37LuDFt3AIRbYLGDBAilPHi0iJB_jQqWqH8J1mUzCsArj2VuSel7kERqpwFz-SwOOS4EA7CaoOuOlleOpynBalTK9vm1vU3n81K4TAgNq-Mg9CsiFMVQULURdmku7-2gcc3VS8vBXo9OlEgzqmGjLDvIy8_-LCcwuoSVC2DL2t2PIcNUDKQsBu1GBPQ99wzHcnyEpvjVRkg7v4zQWtlIUY6PcLjNf_vnfuXuCERAwBwjS86T7n8ZscfmVVebISVvAKyDN6YhW41hnUw-AZYRLtuhbE8Z48V0tLfLw9aeVr-Qe2mlaYj0LqGYlqBLqUtRl9HSaA9USa6tQ1KQJvF5_6JPcIBJuSkEsrY9n1xhnCViAiyFVF4XWbtToULn69B2UtoXw1X8y_Wek_T7D7t0fi5KWKj8QHO6yI3ZIWViERS2K6n7mnL_3z_7CNeewVxmqMXNdeWl7yPmAMzUAv6z7pWm-R1Qpv7tNVj4-FfQAk3vOm56hE"
这就是我使用你从 api 获得帖子的令牌的方式,但它不起作用。
Future<Model> ViewWelcomeScreen() async {
String url = '$baseurl/post/20';
ApiService().getToken().then((value){
token = value;
});
final response = await http.get(url, headers: {
'Content-type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer $token'
});
print(token);
if (response.statusCode == 200) {
var test = json.decode(response.body);
var jsonResponse = test['data'];
return Model.fromJson(jsonResponse);
} else {
throw Exception('Failed to load data');
}
}
解决方案
Future<Model> ViewWelcomeScreen() async {
String url = '$baseurl/post/20';
ApiService().getToken().then((value){
token = value;
});
final response = await http.get(url, headers: {
'Content-type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer $token'
});
print(token);
if (response.statusCode == 200) {
var test = json.decode(response.body);
var jsonResponse = test['data'];
return Model.fromJson(jsonResponse);
} else {
throw Exception('Failed to load data');
}
}
代码在某种程度上是错误的,认为你有 async 然后两者都在同一个函数上,为什么?
ApiService().getToken().then((value){
token = value;
});
在这里你说我想要令牌,我不需要等待然后你去尝试使用那个变量
final response = await http.get(url, headers: {
'Content-type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer $token'
});
在颤动中看到每个 async-await 的工作方式类似于 javascript 中的事件循环
- 我写异步
- 普通代码
- 在 1. 函数中使用 then
- 1. 中的依赖代码作为 async-await
输出会是什么?事件循环将首先将 1,2,3,4 作为异步函数,它将运行 1,一旦它接收到正常代码,它就会正常运行,但如果它接收到,它就会明白这个结果并不重要,所以让我做剩下的工作将返回执行 3rd then 函数,因此它将运行 4 然后 3rd 函数
但是你想要令牌
ApiService().getToken().then((value){
token = value;
});
将其替换为
token = await ApiService().getToken();
您的服务可能需要令牌,这就是它不是 200 状态码的原因。
推荐阅读
- c++ - glDrawElements 可以独立于多边形类型使用吗?
- matplotlib - Matplotlib 图的默认宽度和高度
- lua - Unable to load Lua Scripts to NodeMCU: Invalid node.chipid()
- c - 非常简单的普通 C 非负整数解析器的非常奇怪的行为
- javascript - 在 Puppeteer 中使用 page.$eval() 时如何将变量放入浏览器上下文中?
- swift - 在swift的代码中修改高度约束后,UILabel不显示全文
- ios - 可以将 IOS 应用程序与 ERC20 令牌集成
- c++ - 来自 std::vector 的映射
到 Eigen::VectorXi - python - 如何使用 Docker 创建 Python 可执行文件
- python - 如何使用另一个列表过滤列表?