上下文: 我正在为一门课程开发Java中的Android Weather应用程序。此应用程序使用asynctask以便从OpenWeather的API获取城市的温度。 API通过如下URL返回带有天气信息的JSON:
g.V('A').emit().repeat(outE().has("color", "blue").inV().dedup())
APPID是与OpenWeather中的帐户关联的密钥。这是柏林城市的JSON示例:
http://api.openweathermap.org/data/2.5/weather?q={city name}&appid={key}
如果城市不存在,API将返回JSON,错误404。下一个是不存在的城市 Berlina 的JSON示例。
{"coord":{"lon":13.39,"lat":52.52},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01d"}],"base":"stations","main":{"temp":8.49,"pressure":1035,"humidity":61,"temp_min":8,"temp_max":9},"visibility":10000,"wind":{"speed":6.7,"deg":120},"clouds":{"all":0},"dt":1542369000,"sys":{"type":1,"id":4892,"message":0.0027,"country":"DE","sunrise":1542349837,"sunset":1542381079},"id":2950159,"name":"Berlin","cod":200}
我通过Asynctask获得了JSON。在doInBackground()方法中,我调用以下行以获取inputStream:
{"cod":"404","message":"city not found"}
然后,我在postOnExecute()中解析JSON,并用Toast显示温度信息。
我的问题: 该代码在 Berlina 上可以正常工作,但是openStream为 Berlina 抛出IOException。正如我所解释的,URL存在并且具有JSON数据。那么,此异常的原因可能是什么?可能是连接问题吗?
使用Logcat编辑 这是异常的详细信息:
InputStream inputStream = new URL(url).openStream();