【发布时间】:2020-03-04 15:33:06
【问题描述】:
我正在做一个项目,我正在创建一个用于给植物浇水的 Java 应用程序。从在线获取天气信息并基于该输出的想法应该是我们的植物是否需要水。对于天气信息,我找到了API OpenWeatherMap,我尝试使用 YouTube 的教育视频来实现它。我过去没有使用 API 的经验。我正在使用的视频是“https://www.youtube.com/watch?v=og5h5ppwXgU”。我尝试以与那个人相同的方式实现我的程序,但我没有得到任何输出。它只是打印打印语句中的内容,而不是实际数据。
public static Map<String,Object> jsonToMap(String str){
Map<String,Object> map = new Gson().fromJson(str,new
TypeToken<HashMap<String,Object>> () {}.getType());
return map;
}
public static void main(String[] args) {
String API_KEY = "16 digit Private Key";
String LOCATION = "Los Angeles,CA";
String urlString = "http://api.openweathermap.org/data/2.5/weather?
q=" + LOCATION + "&appid=" + API_KEY + "&units =imperial";
try{
StringBuilder result = new StringBuilder();
URL url = new URL(urlString);
URLConnection conn = url.openConnection();
BufferedReader rd = new BufferedReader(new InputStreamReader (conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null){
result.append(line);
}
rd.close();
System.out.println(result);
Map<String, Object > respMap = jsonToMap (result.toString());
Map<String, Object > mainMap = jsonToMap (respMap.get("main").toString());
Map<String, Object > windMap = jsonToMap (respMap.get("wind").toString());
System.out.println("Current Temperature: " + mainMap.get("temp") );
System.out.println("Current Humidity: " + mainMap.get("humidity") );
System.out.println("Wind Speed: " + windMap.get("speed") );
System.out.println("Wind Angle: " + windMap.get("deg") );
}catch (IOException e){
System.out.println(e.getMessage());
}
}
我收到 gson 库不存在的错误,但是在我使用 javadoc、类路径和源在 net beans 中创建我自己的库后,问题得到了解决,所以我认为是正确的。openweathermap 的 API 密钥也是也有效。我只是无法获取获取在线信息的代码。
输出:
http://api.openweathermap.org/data/2.5/weatherq=Losangeles,CA&appid="16 位私钥"&units =imperial
预期输出:洛杉矶当前天气信息
【问题讨论】:
-
这是处理 API 的一种非常糟糕的方式(在这种情况下,它通常被称为使用 API)。您应该创建一个与 JSON 结构匹配的 POJO(或者如果您在数组中发送,则为列表项结构)。然后简单地反序列化它。这是一个教程:baeldung.com/gson-deserialization-guide