【发布时间】:2019-04-29 09:17:16
【问题描述】:
我目前正在开发一个访问在线 API 的 android 应用程序。我有一个专门用于此任务的类,还有一个只使用从 API 检索到的信息的类。问题是当我调用API访问类时,它必须是异步的(由android studio定义)所以我使用了一个新线程,但是使用数据的类中的返回为null,当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();
但是当我尝试在另一个班级这样做时:
System.out.println(retour.toString());
我得到一个空指针异常,因为前一个方法的返回为空。
我的错误是什么?
【问题讨论】:
-
添加更多代码,例如您在何处以及如何调用代码来执行 Thread 类以及您在何处使用 API 响应。
标签: java android multithreading java-threads