java - 为什么这个 sendAsync 请求 String BodyHandler 返回一个空数组?
问题描述
这是我的方法的代码,该方法应该从 Binance 获取 5 分钟的蜡烛。(我有一个方法头,stackoverflow 代码插入有问题,我不知道如何使用它。忽略空方法头,它的返回类型是字符串)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.GET()
.uri(URI.create(API_URL + "api/v3/klines?symbol=BTCUSDT&interval=5m"))
.build();
ArrayList<String> fetchedData = new ArrayList<String>();
System.out.println(fetchedData);
client.sendAsync(request,HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(fetchedData::add)
.join();
String aString = fetchedData.get(0);
return(aString);
但是,aString 只是空括号 []。我不确定如何遍历这个数组并返回我感兴趣的数据。相比之下,我有一个函数方法,它通过调用另一个 API 端点并执行字符串遍历从服务器检索价格。
public double getPrice() {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.GET()
.uri(URI.create(API_URL + "api/v3/ticker/24hr?symbol=BTCUSDT"))
.build();
ArrayList<String> fetchedData = new ArrayList<String>();
client.sendAsync(request,HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(fetchedData::add)
.join();
// Begin resource intensive string search for BTCUSDT Last Price
////
String aString = fetchedData.get(0);
String bString = "";
String cString = "";
String price = "";
double doublePrice = 0.0;
boolean foundBTCUSDT = false;
boolean foundLastPrice = false;
boolean foundPrice = false;
int savedStartBTCUSDT = 0;
int savedStartLastPrice = 0;
for(int k = 0; k < aString.length() && !foundBTCUSDT; k++) {
if(aString.charAt(k) == 'B'){
savedStartBTCUSDT = k;
if(aString.charAt(k+1) == 'T') {
if (aString.charAt(k+2) == 'C') {
if (aString.charAt(k+3) == 'U') {
if(aString.charAt(k+4) == 'S')
if (aString.charAt(k+5) == 'D') {
if (aString.charAt(k+6) == 'T') {
foundBTCUSDT = true;
}
}
}
}
}
}
}
bString = aString.substring(savedStartBTCUSDT);
for(int i = 0; i < bString.length() && !foundLastPrice; i++){
if(bString.charAt(i) == 't'){
savedStartLastPrice = i;
if(bString.charAt(i+1) == 'P') {
if (bString.charAt(i+2) == 'r') {
if (bString.charAt(i+3) == 'i') {
if(bString.charAt(i+4) == 'c')
if (bString.charAt(i+5) == 'e') {
if (bString.charAt(i+6) == '"') {
if (bString.charAt(i+7) == ':') {
if(bString.charAt(i+8) == '"') {
foundLastPrice = true;
}
}
}
}
}
}
}
}
}
cString = bString.substring(savedStartLastPrice+9);
for(int c = 0; !foundPrice; c++) {
if(cString.charAt(c) == '"') {
price = cString.substring(0, c);
foundPrice = true;
}
}
doublePrice = Double.parseDouble(price);
return(doublePrice);
}
谁能帮助我使用第一种方法并告诉我如何执行功能数组遍历以获取我感兴趣的信息?谢谢。
解决方案
推荐阅读
- angular - Karma Jasmin - 为什么即使没有测试用例,我的测试用例也会随机失败?
- arrays - 获取数组bash raspbian中命令的每一行
- java - 如何使用 okhttp 更改连接请求的标头
- c++ - 当值包含引号(“)时如何返回json字符串
- php - 通过soapclient向需要CDATA的服务发送SOAP请求的问题
- java - Quarkus Keycloak 管理员客户端
- ruby-on-rails - 在节目中找不到 'id'=number 的用户
- javascript - Puppeteer 不会保存无头 Ubuntu 的截图
- python - 带有猴子补丁实例方法的 Python 复制对象
- python-3.x - 获取 ValueError:索引包含重复的条目,无法重塑