Sugar ORM не сохраняет данные в БД - PullRequest
0 голосов
/ 15 октября 2018

, пожалуйста, сообщите мне о моей проблеме.

Вот мой корневой класс модели, фактически сгенерированный POJO:

public class WeatherRootObject extends SugarRecord {

public WeatherRootObject()
{

}

public WeatherRootObject(Current current, Location location, Forecast forecast) {
    this.current = current;
    this.location = location;
    this.forecast = forecast;
}

@SerializedName("current")
private Current current;

@SerializedName("location")
private Location location;

@SerializedName("forecast")
private Forecast forecast;

public void setCurrent(Current current){
    this.current = current;
}

public Current getCurrent(){
    return current;
}

public void setLocation(Location location){
    this.location = location;
}

public Location getLocation(){
    return location;
}

public void setForecast(Forecast forecast){
    this.forecast = forecast;
}

public Forecast getForecast(){
    return forecast;
}

@Override
public String toString(){
    return 
        "WeatherRootObject{" + 
        "current = '" + current + '\'' + 
        ",location = '" + location + '\'' + 
        ",forecast = '" + forecast + '\'' + 
        "}";
    }
}    

Я пытаюсь сохранить объект в базу данных только для его кэширования ичтобы отобразить его на экране.Вот мой метод в Presenter, предназначенный для загрузки данных и их отображения на экране:

public static void getWeatherForecastOneDay(final TextView conditionTextView,
                                            final TextView temperatureTextView,
                                            final TextView temperatureFeelsLikeTextView,
                                            final TextView pressureTextView,
                                            final TextView windSpeedTextView,
                                            final TextView windDirectionTextView,
                                            final TextView humidityTextView,
                                            final ImageView weatherPicture) {
    context = MainActivity.context;
    String KEY = context.getResources().getString(R.string.api_key);


    Presenter.getWeatherForecastApi().getForecast7Days(KEY, "Nizhny Novgorod", 7, "ru")
            .enqueue(new Callback<WeatherRootObject>() {
                @Override
                public void onResponse(Call<WeatherRootObject> call, Response<WeatherRootObject> response) {


                    WeatherRootObject weatherRootObject = new WeatherRootObject(
                            response.body().getCurrent(),
                            response.body().getLocation(),
                            response.body().getForecast());
                    weatherRootObject.save();

                    WeatherRootObject weatherRootObjectSaved = WeatherRootObject.findById(WeatherRootObject.class, 1);


                    humidity = weatherRootObjectSaved.getCurrent().getHumidity();
                    imageURI = "http:" + weatherRootObjectSaved.getCurrent().getCondition().getIcon();
                    condition = weatherRootObjectSaved.getCurrent().getCondition().getText();
                    windSpeed = weatherRootObjectSaved.getCurrent().getWindKph();
                    windDirection = weatherRootObjectSaved.getCurrent().getWindDir();
                    pressure = weatherRootObjectSaved.getCurrent().getPressureMb();
                    temperature = weatherRootObjectSaved.getCurrent().getTempC();
                    temperatureFeelsLike = weatherRootObjectSaved.getCurrent().getFeelslikeC();



                    humidityTextView.setText(String.valueOf(humidity));
                    Picasso.get().load(imageURI).into(weatherPicture);
                    conditionTextView.setText(String.valueOf(condition));
                    windSpeedTextView.setText(String.valueOf(windSpeed));
                    windDirectionTextView.setText(String.valueOf(windDirection));
                    pressureTextView.setText(String.valueOf(pressure));
                    temperatureTextView.setText(String.valueOf(temperature));
                    temperatureFeelsLikeTextView.setText(String.valueOf(temperatureFeelsLike));



                }

                @Override
                public void onFailure(Call<WeatherRootObject> call, Throwable t) {
                    Log.i("GETTA", t.toString());


                }
            });


}

Так что, когда я просто загружаю информацию с помощью модернизации, она отлично работает.Когда я пытаюсь сохранить данные и использовать их при заполнении TextView, я всегда получаю исключение NullPointerException: попытка вызвать виртуальный метод int com.weather.Model.Current.getHumidity () 'для ссылки на пустой объект

Итак, похоже, что данные не сохраняются в БД, когда я запрашиваю их, и я не могу понять, почему.

...