gpt4 book ai didi

Java函数在执行之前返回一个值

转载 作者:行者123 更新时间:2023-12-01 16:44:13 26 4
gpt4 key购买 nike

我目前正在开发一个 Android 应用程序,它可以访问在线 API。我有一个类专门用于此任务,另一个类仅使用从 API 检索的信息。问题是,当我调用API访问类时,它必须是异步的(由android studio定义),所以我使用一个新的线程,但是使用数据的类中的返回为空,当API访问类返回好的结果。

我已经尝试使用 thread.join() 连接两个线程,但它不起作用。

这里是API访问类中访问API的函数。最后的System.out按预期工作(我在控制台中看到了良好的结果)

Thread t = new Thread() {
public void run() {
try {
String url = "-----------------------------------------------"+id;
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();

con.setRequestMethod("GET");

con.setRequestProperty("x-api-key", "-------------------------------");
int responseCode = con.getResponseCode();

BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();

while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
HttpRequest.retour = new JSONArray(response.toString());
System.out.println(HttpRequest.retour.toString());
}catch(Exception e){
e.printStackTrace();
}
}
};
t.start();

但是当我尝试在另一个类(class)中这样做时:

System.out.println(retour.toString());

由于前一个方法的返回值为 null,因此出现空指针异常。

我的错误是什么?

最佳答案

这可能是因为您存在数据竞争。当您必须线程时,它们会并行执行,在这种情况下意味着您的主线程到达 System.out.println(retour.toString());在网络线程将响应写入对象之前。
您必须找到一种方法来同步它们,以确保这种情况不会发生。
鉴于您使用的是 Android,您可能需要查看 retrogradeOkHttp将这个低级功能抽象出来。

关于Java函数在执行之前返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55900274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com