2017-08-11 59 views
0

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

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 

请人EXPL艾因我如何避免这种错误:(

+0

您发布的代码中没有任何内容更新'isOutdate'的值...您在哪里更改它? –

+0

对不起,我更新了问题,我从VersionDb.getEstado –

回答

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值在虚假初始化,所以这将是因为它始终为假在从服务返回之前执行检查。

因此,要么等待您的回调,要么在改造中使用同步方法execute