java - 使用 WSResponse 时如何设置局部变量值
问题描述
我正在尝试设置局部变量的值,但这显示错误
在封闭范围内定义的局部变量 user_id 必须是最终的或有效的最终的
在封闭范围中定义的局部变量用户名必须是最终的或有效的最终的
我如何解决它?
这是我的代码:
int user_id;
String username;
WSRequest req1 = ws.url("https://www.example.com");
CompletionStage<WSResponse> rsp1 = req1.get();
rsp1.thenAccept((rs) -> {
JsonNode result = rs.asJson();
Boolean status = result.findPath("status").asBoolean();
if (status == true) {
user_id = result.findPath("user").findPath("id").asInt(); //error here
username = result.findPath("user").findPath("uname").textValue(); //error here
}
}).toCompletableFuture().get();
解决方案
HTTP 请求是异步处理的,您不能从 lambda 函数内(来自另一个线程)设置外部范围变量的值并以同步方式使用它。
如果要同步处理结果,只需等待请求完成即可使用:
JsonNode result = rsp1.thenAccept(rs -> return rs.asJson()).toCompletableFuture().get();
Boolean status = result.findPath("status").asBoolean();
if (status) {
...
}
推荐阅读
- java - Gradle 构建失败
- vba - 如何正确处理 VBA 中的 FollowHyperlink 错误?
- php - 在php中提取ZIP,覆盖所有内容
- css - 带有文本的悬停效果到菜单项
- node.js - Postgres 连接池大小超出 AWS 中的配置值。可能是什么原因?
- vba - VBA 用户窗体 - 动态文本框默认值
- ios - FirebaseUI Firestore 未在 iOS 上检索数据
- c# - 使用 NAudio 播放 FFMPEG 音频有很多噪音
- javascript - 如何将数组转换为数学计算表达式?
- wordpress - Laravel 从 Wordpress 获取 cookie