2017-08-11 14 views
0

私の主な活動では、SQLiteとMYSQL Server間のデータを比較するためにSincronizacionDbを実行しましたが、json_arrayは正常に動作しましたが、サーバとは異なるデータ、 APPでは、この値は常に偽と思われます。Androidディスプレイboolean Retrofitからfalse false常に

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 

してください誰かが正しくありません私アインこのエラーを回避する方法:(

+0

あなたが掲示したコードには、 'isOutdate'の値を更新するものは何もありません...どこで変更していますか? –

+0

申し訳ありませんが、質問を更新しました。私は値を取得しましたfromVersionDb.getEstado –

答えて

0

あなたがここでasynchrounousコールやっているようだ:

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を改造して使用してください。

関連する問題