Я хочу сделать приложение для получения информации о погоде от ACCU. Но я получаю json из других инструментов, это нормально, но я не работаю в моем приложении. Я использую Log.v, чтобы проверить, что мой sb.toString () всегда равен нулю. Но я проверяю, что URL-адрес работает.
Вот файл JSON.
[{"Version":1,"Key":"4-315078_1_AL","Type":"City","Rank":20,"LocalizedName":"Taipei","EnglishName":"Taipei City","PrimaryPostalCode":"","Region":{"ID":"ASI","LocalizedName":"Asia","EnglishName":"Asia"},"Country":{"ID":"TW","LocalizedName":"Taiwan","EnglishName":"Taiwan"},"AdministrativeArea":{"ID":"TPE","LocalizedName":"Taipei City","EnglishName":"Taipei City","Level":1,"LocalizedType":"Special Municipality","EnglishType":"Special Municipality","CountryID":"TW"},"TimeZone":{"Code":"CST","Name":"Asia/Taipei","GmtOffset":8.0,"IsDaylightSaving":false,"NextOffsetChange":null},"GeoPosition":{"Latitude":25.048,"Longitude":121.514,"Elevation":{"Metric":{"Value":8.0,"Unit":"m","UnitType":5},"Imperial":{"Value":26.0,"Unit":"ft","UnitType":0}}},"IsAlias":true,"ParentCity":{"Key":"315078","LocalizedName":"Taipei City","EnglishName":"Taipei City"},"SupplementalAdminAreas":[],"DataSets":["MinuteCast"]},{"Version":1,"Key":"2587880","Type":"City","Rank":55,"LocalizedName":"Shuangyang Subdistrict","EnglishName":"Shuangyang Subdistrict","PrimaryPostalCode":"","Region":{"ID":"ASI","LocalizedName":"Asia","EnglishName":"Asia"},"Country":{"ID":"CN","LocalizedName":"China","EnglishName":"China"},"AdministrativeArea":{"ID":"FJ","LocalizedName":"Fujian","EnglishName":"Fujian","Level":1,"LocalizedType":"Province","EnglishType":"Province","CountryID":"CN"},"TimeZone":{"Code":"CST","Name":"Asia/Shanghai","GmtOffset":8.0,"IsDaylightSaving":false,"NextOffsetChange":null},"GeoPosition":{"Latitude":24.996,"Longitude":118.615,"Elevation":{"Metric":{"Value":22.0,"Unit":"m","UnitType":5},"Imperial":{"Value":72.0,"Unit":"ft","UnitType":0}}},"IsAlias":false,"ParentCity":{"Key":"2332527","LocalizedName":"Luojiang District","EnglishName":"Luojiang District"},"SupplementalAdminAreas":[{"Level":2,"LocalizedName":"Quanzhou","EnglishName":"Quanzhou"}],"DataSets":["AirQuality","Alerts","DailyAirQualityForecast","DailyLocalIndices","MinuteCast","PremiumAirQuality"]},{"Version":1,"Key":"3490796","Type":"City","Rank":85,"LocalizedName":"Haizhouwan Subdistrict","EnglishName":"Haizhouwan Subdistrict","PrimaryPostalCode":"","Region":{"ID":"ASI","LocalizedName":"Asia","EnglishName":"Asia"},"Country":{"ID":"CN","LocalizedName":"China","EnglishName":"China"},"AdministrativeArea":{"ID":"JS","LocalizedName":"Jiangsu","EnglishName":"Jiangsu","Level":1,"LocalizedType":"Province","EnglishType":"Province","CountryID":"CN"},"TimeZone":{"Code":"CST","Name":"Asia/Shanghai","GmtOffset":8.0,"IsDaylightSaving":false,"NextOffsetChange":null},"GeoPosition":{"Latitude":34.66,"Longitude":119.197,"Elevation":{"Metric":{"Value":16.0,"Unit":"m","UnitType":5},"Imperial":{"Value":52.0,"Unit":"ft","UnitType":0}}},"IsAlias":false,"ParentCity":{"Key":"2333025","LocalizedName":"Lianyun District","EnglishName":"Lianyun District"},"SupplementalAdminAreas":[{"Level":2,"LocalizedName":"Lianyungang","EnglishName":"Lianyungang"},{"Level":3,"LocalizedName":"Lianyun District","EnglishName":"Lianyun District"}],"DataSets":["AirQuality","Alerts","DailyAirQualityForecast","DailyLocalIndices","MinuteCast","PremiumAirQuality"]}]
и вот мой код
URL cc = new URL(url);
HttpURLConnection conn = (HttpURLConnection) cc.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
StringBuilder sb = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = "";
while ((line = reader.readLine()) != null) {
sb.append(line);
}
JSONArray jsonArray = new JSONArray(sb.toString());
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject getArrayObject = jsonArray.getJSONObject(i);
}
сообщение об ошибке всегда
W/System.err: org.json.JSONException: End of input at character 0 of
W/System.err: at org.json.JSONTokener.syntaxError(JSONTokener.java:449)
Пожалуйста, используйте logcat для вывода значения экземпляра sb.
Я нашел свою проблему! Мне просто нужно изменить свой параметр на UTF-8, он работает
Хотя
HttpURLConnectionявляется обычным способом, я предлагаю вам использовать сетевую библиотекуRetroFitили, возможно,Volley.