OpenStream在AsyncTask中引发IOException

时间:2018-11-16 15:15:43

标签: android json android-asynctask

上下文: 我正在为一门课程开发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();

0 个答案:

没有答案