Получить JSON из API с помощью android

Я хочу сделать приложение для получения информации о погоде от 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)

Хотя HttpURLConnection является обычным способом, я предлагаю вам использовать сетевую библиотеку RetroFit или, возможно, Volley.

ADM 14.08.2018 06:04

Пожалуйста, используйте logcat для вывода значения экземпляра sb.

Son Truong 15.08.2018 03:11

Я нашел свою проблему! Мне просто нужно изменить свой параметр на UTF-8, он работает

user9070403 15.08.2018 11:51
0
3
35
0

Другие вопросы по теме