Android显示来自Retrofit的布尔值为false ALWAYS

时间:2017-08-11 14:53:00

标签: android api retrofit retrofit2 android-json

在我的主要活动中,我执行SincronizacionDb来比较SQLite和MYSQL服务器之间的数据,但是检索到的json_array工作正常,如果数据与服务器不同,则显示为true或false,但在APP中,此值似乎总是假的。

SincronizacionDb

private void sincronizacionDB() {
    if (dbCheck(MainActivity.this, "beneficiosColaborador.db")) {
        int size = sqLiteHandler.getLastIdBeneficio();
        Call<VersionDb> versionDb = restManager.getApiService().checkServerDatabaseVersion(size);
        versionDb.enqueue(new Callback<VersionDb>() {
            @Override
            public void onResponse(Call<VersionDb> call, Response<VersionDb> response) {
                Log.e("RESPONSE", "CALLING ON RESPONSE");
                VersionDb version = response.body();
                isOutdate = version.getEstado();
                Log.i("VERSION", "RESPUESTA" + version.getEstado()); // Get the value from GSon(TRUE, FALSE) WORKS PERFECT
            }

            @Override
            public void onFailure(Call<VersionDb> call, Throwable t) {
                Log.e("error", t.getMessage());
            }
        });
        Log.e("outdate","" + isOutdate); // ALWAYS FALSE
        if (isOutdate) {
            sqLiteHandler.deleteBeneficio();
            Log.e("Beneficios", "Se han eliminado los beneficios viejos");
            Call<List<Beneficios>> callBeneficios = restManager.getApiService().getListadoBeneficios();
            callBeneficios.enqueue(new Callback<List<Beneficios>>() {
                @Override
                public void onResponse(Call<List<Beneficios>> call, Response<List<Beneficios>> response) {
                    List<Beneficios> beneficioData = response.body();
                    sqLiteHandler.addListBeneficios(beneficioData);
                }

                @Override
                public void onFailure(Call<List<Beneficios>> call, Throwable t) {
                    Log.e("error", t.getMessage());
                    //Toast.makeText(MainActivity.this, t.getMessage(), Toast.LENGTH_LONG).show();
                }
            });
        }
    }else{
        Call<List<Beneficios>> callBeneficios = restManager.getApiService().getListadoBeneficios();
        callBeneficios.enqueue(new Callback<List<Beneficios>>() {
            @Override
            public void onResponse(Call<List<Beneficios>> call, Response<List<Beneficios>> response) {
                List<Beneficios> beneficioData = response.body();
                sqLiteHandler.addListBeneficios(beneficioData);
            }

            @Override
            public void onFailure(Call<List<Beneficios>> call, Throwable t) {
                Log.e("error", t.getMessage());
                //Toast.makeText(MainActivity.this, t.getMessage(), Toast.LENGTH_LONG).show();
            }
        });
    }
}

EXAMPLE JSON TRUE

EXAMPLE JSON FALSE

和我在ANDROID MONITOR中得到的结果

    08-11 08:39:31.417 13618-13618/com.freelance.crdzbird_dev.clarobadge D/SQLiteHandler: Fetching LAST ROW from Sqlite: 213
08-11 08:39:31.617 13618-13618/com.freelance.crdzbird_dev.clarobadge E/outdate: false
08-11 08:39:31.867 13618-13618/com.freelance.crdzbird_dev.clarobadge E/RESPONSE: CALLING ON RESPONSE
08-11 08:39:31.867 13618-13618/com.freelance.crdzbird_dev.clarobadge I/VERSION: RESPUESTA true

请有人解释我如何避免这个错误:(

1 个答案:

答案 0 :(得分:0)

您似乎正在这里进行异步调用:

versionDb.enqueue(new Callback<VersionDb>() {
            @Override
            public void onResponse(Call<VersionDb> call, Response<VersionDb> response) {
                Log.e("RESPONSE", "CALLING ON RESPONSE");
                VersionDb version = response.body();
                isOutdate = version.getEstado();
                Log.i("VERSION", "RESPUESTA" + version.getEstado()); // Get the value from GSon(TRUE, FALSE) WORKS PERFECT
            }

            @Override
            public void onFailure(Call<VersionDb> call, Throwable t) {
                Log.e("error", t.getMessage());
            }
        });

并且isOutdate的值初始化为false,因此它将始终为false,因为它在从服务返回之前执行检查。

所以要么等待你的回调,要么在改造中使用同步方法execute