Установить текст после модификации ответа - PullRequest
0 голосов
/ 19 февраля 2019

Я работаю с модификацией, чтобы получить некоторую статистику.Они приходят в приложение.Когда я пытаюсь установить некоторый текст TextView в значения, они выдают исключение NullPointerException.Есть что-то, что я должен знать?

public void init() {
    getStatistics();
txtNrCompleted.setText(String.format("%s", statistics.getTask()));
}

private void getStatistics(){
    endpoints = RetrofitJsonCaller.call(APIEndpoints.class);
    callStatistics = endpoints.getStatistics(URLEndpoints.getStatistics());
    callStatistics.enqueue(new Callback<STATISTIC>() {
        @Override
        public void onResponse(Call<STATISTIC> call, Response<STATISTIC> response) {
            if(response.isSuccessful()) {
                setStatistics(response.body());

            }else{
                Log.d("STATISTICS", "Error: " + response.code());
            }
        }

        @Override
        public void onFailure(Call<STATISTIC> call, Throwable t) {
            Timber.d(t.getMessage());
        }
    });

}

public void setStatistics(STATISTIC statistics){
    this.statistics = statistics;
}

ЛОГИ:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Integer com.example.taskmanagement.model.STATISTIC.getTaskComplet()' on a null object reference
    at com.example.taskmanagement.MainActivity.onCreate(MainActivity.java:111)
    at android.app.Activity.performCreate(Activity.java:6948)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)

1 Ответ

0 голосов
/ 19 февраля 2019

Retrofit выполняет вызов для асинхронного получения статистики, но вы устанавливаете текст в TextView синхронно.Вы звоните getStatistics(), который запускает вызов, чтобы получить новую статистику, но не ждет его завершения.Затем вы сразу же устанавливаете текст, после чего объект statistics все еще равен нулю.Вам необходимо обновить TextView после получения успешного ответа.Например:

public void init() {
    getStatistics(); 
}

private void getStatistics() {
    ...
        @Override
        public void onResponse(Call<STATISTIC> call, Response<STATISTIC> response) {
            if (response.isSuccessful()) {
                setStatistics(response.body()); 
                // Call the code to update your UI here, as we have now received the stats
                updateUI(); 
            } else {
                ...
            }
        }
    ...
}

...

private void updateUI() {
    textNrCompleted.setText(String.format("%s", statistics.getTask())); 
}
...