Получение нуля от вызова API - PullRequest
1 голос
/ 06 июля 2019

У меня проблема с получением данных из API. Код, который я получил, - 200. Получение нулевого значения в ответе.

public void makeRetrofitCall(){
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://openweathermap.org/data/2.5/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    ApiCalls api = retrofit.create(ApiCalls.class);
    Call<Model.Main> call = api.getNewestForecast(latitude,longitude,APP_ID);
    call.enqueue(new Callback<Model.Main>() {
        @Override
        public void onResponse(Call<Model.Main> call, Response<Model.Main> response) {
            if (!response.isSuccessful()){
                Log.i(TAG, "AWS: "+response.code());
            }
            Log.i(TAG, "onResponse: "+response.code());
            List<Model.Main> list = Collections.singletonList(response.body());

            for (Model.Main main : list){
                String content = "";
                content += main.getTemperature();
                Log.i(TAG, "onResponse : \n"+content);
            }
        }
        @Override
        public void onFailure(Call<Model.Main> call, Throwable t) {
            Log.i(TAG, "onFailure: "+t.getMessage());
        }
    });
 }
}

Api

@GET("weather")
Call<Model.Main> getNewestForecast(
        @Query("lat") Double latitude,
        @Query("lon") Double longitude,
        @Query("appid") String key);

POJO

public class Model {

@SerializedName("main")
private Main main;

public Main getMain() {
    return main;
}

  class Main {

    @SerializedName("temp")
    private Double actualTemperature;

    public Double getTemperature() {
        return actualTemperature;
    }

 }
}

Редактировать, забыл добавить ответ. Ответ JSON

  {
  "coord": {
    "lon": -0.12,
    "lat": 51.51
  },
  "weather": [
    {
      "id": 500,
      "main": "Rain",
      "description": "light rain",
      "icon": "10d"
    }
  ],
  "base": "stations",
  "main": {
    "temp": 20.07,
    "pressure": 1013,
    "humidity": 64,
    "temp_min": 17.22,
    "temp_max": 23
  },
  "visibility": 10000,
  "wind": {
    "speed": 4.1,
    "deg": 350
  },
  "clouds": {
    "all": 75
  },
  "dt": 1562435414,
  "sys": {
    "type": 1,
    "id": 1414,
    "message": 0.0123,
    "country": "GB",
    "sunrise": 1562385062,
    "sunset": 1562444336
  },
  "timezone": 3600,
  "id": 2643743,
  "name": "London",
  "cod": 200
}

Широта и долгота верны, api_key также. Я думаю, что-то с классом pojo. Что я должен изменить в коде, чтобы он работал?

1 Ответ

1 голос
/ 06 июля 2019

Я думаю, ваша ошибка заключается в добавлении вашей модели. Измените ваш API-ответ с Model.Main на Main

Измените код

Измените

@GET("weather")
Call<Model.Main> getNewestForecast(
        @Query("lat") Double latitude,
        @Query("lon") Double longitude,
        @Query("appid") String key);

К

@GET("weather")
Call<Model> getNewestForecast(
        @Query("lat") Double latitude,
        @Query("lon") Double longitude,
        @Query("appid") String key);
...