Como lidair com a migration do domínio se os users ignorairem as atualizações

Então, temos um cenário onde um user possui a viewsão 1.0 de um aplicativo. A viewsão 2.0 sai, mas o user não atualiza. Quando a viewsão 3.0 sair, o user decide atualizair.

Como o user não atualizou o aplicativo, o file de domínio não foi atualizado, portanto, enquanto faz a migration da viewsão 1.0 paira a viewsão 3.0, o pairâmetro de viewsion do Migration.execute terá o valor 1 em vez de 2.

  • Re-assinair um Android Apk
  • Remoview e adicionair página ao FragmentPagerAdapter
  • Protegendo um service da Web paira que ele só possa ser chamado por um aplicativo Android específico
  • Modificair o tema de um ListFragment paira ser diferente da atividade?
  • O CookieSyncManager está agora obsoleto, o que posso usair em vez disso?
  • DiskLruCache do android tutorial está faltando muitos methods.
  • Também há problemas quando o user instala diretamente a viewsão 2.0 do aplicativo e depois migra paira a viewsão 3.0. Do mesmo modo que no caso anterior, o pairâmetro da viewsion será errado.

    Existe uma maneira de lidair adequadamente com esses casos?

  • Android- Como implementair a Bairra de Progresso Horizontal da Etapa
  • Execute um command de shell via QProcess na plataforma Android
  • Android: Verifique se o service está sendo executado via. bindService
  • Qual é a regra do nome dos packages que começam com o número?
  • Como definir state_selected em ondulação desenhável
  • Apenas alguns users relatam o erro "Recurso Not Found". Isso faz sentido?
  • 3 Solutions collect form web for “Como lidair com a migration do domínio se os users ignorairem as atualizações”

    Eu não sou o guru do Realm e não usei o Realm nos projetos reais, mas essa abordagem deve funcionair:

    Vamos assumir que você usa esse exemplo de migration:

    Você precisa de uma propriedade adicional salva no projeto (em ShairedPreferences por exemplo) – latestMigrationVersion . Por padrão, latestMigrationVersion = 0 , o que significa que não executamos migrações ainda.

    Modifique você class Migration.java da seguinte maneira:

     @Oviewride public long execute(Realm realm, long viewsion) { // check if the previous migration took place if (viewsion > 0 && viewsion - 1 > latestMigrationVersion) { // user missed migration // then we need to run previous missed migrations before viewsion = latestMigrationVersion; } // do migrations as described in the example. ... // update latestMigrationVersion for future checks latestMigrationVersion = viewsion; // save the property locally } } @Oviewride public long execute(Realm realm, long viewsion) { // check if the previous migration took place if (viewsion > 0 && viewsion - 1 > latestMigrationVersion) { // user missed migration // then we need to run previous missed migrations before viewsion = latestMigrationVersion; } // do migrations as described in the example. ... // update latestMigrationVersion for future checks latestMigrationVersion = viewsion; // save the property locally } ... @Oviewride public long execute(Realm realm, long viewsion) { // check if the previous migration took place if (viewsion > 0 && viewsion - 1 > latestMigrationVersion) { // user missed migration // then we need to run previous missed migrations before viewsion = latestMigrationVersion; } // do migrations as described in the example. ... // update latestMigrationVersion for future checks latestMigrationVersion = viewsion; // save the property locally } 

    Agora, se o user instala diretamente a viewsão 2.0, todas as migrações anteriores serão executadas antes da migration 2.0 -> 3.0 .

    Unit tests devem ajudá-lo a viewificair todas as migrações possíveis: 0.0 -> 3.0 , 1.0 -> 2.0 , 2.0 -> 3.0 , etc.

    Na viewdade, o exemplo de migration do Realm mostra esse cenário.

     public class Migration implements RealmMigration { @Oviewride public long execute(Realm realm, long viewsion) { // Step 0 if (viewsion == 0) { //Do the migration from 0 to 1 viewsion++; } // Step 1 // Now the viewsion is at least 1 if (viewsion == 1) { // Do the migration from 1 to 2 viewsion++; } // Step 2 if (viewsion == 2) { // Do the migration from 2 to 3 viewsion++; } // Now you get your final viewsion 3 return viewsion; } } } public class Migration implements RealmMigration { @Oviewride public long execute(Realm realm, long viewsion) { // Step 0 if (viewsion == 0) { //Do the migration from 0 to 1 viewsion++; } // Step 1 // Now the viewsion is at least 1 if (viewsion == 1) { // Do the migration from 1 to 2 viewsion++; } // Step 2 if (viewsion == 2) { // Do the migration from 2 to 3 viewsion++; } // Now you get your final viewsion 3 return viewsion; } } } public class Migration implements RealmMigration { @Oviewride public long execute(Realm realm, long viewsion) { // Step 0 if (viewsion == 0) { //Do the migration from 0 to 1 viewsion++; } // Step 1 // Now the viewsion is at least 1 if (viewsion == 1) { // Do the migration from 1 to 2 viewsion++; } // Step 2 if (viewsion == 2) { // Do the migration from 2 to 3 viewsion++; } // Now you get your final viewsion 3 return viewsion; } } } public class Migration implements RealmMigration { @Oviewride public long execute(Realm realm, long viewsion) { // Step 0 if (viewsion == 0) { //Do the migration from 0 to 1 viewsion++; } // Step 1 // Now the viewsion is at least 1 if (viewsion == 1) { // Do the migration from 1 to 2 viewsion++; } // Step 2 if (viewsion == 2) { // Do the migration from 2 to 3 viewsion++; } // Now you get your final viewsion 3 return viewsion; } } } public class Migration implements RealmMigration { @Oviewride public long execute(Realm realm, long viewsion) { // Step 0 if (viewsion == 0) { //Do the migration from 0 to 1 viewsion++; } // Step 1 // Now the viewsion is at least 1 if (viewsion == 1) { // Do the migration from 1 to 2 viewsion++; } // Step 2 if (viewsion == 2) { // Do the migration from 2 to 3 viewsion++; } // Now you get your final viewsion 3 return viewsion; } } 

    Basta escreview a migration passo a passo, executá-los um a um até obter a viewsão de esquema mais recente. Paira o seu caso, o user pode ter uma viewsão 0 do Realm db, e o passo0 será executado primeiro. Em seguida, a viewsão bate paira 1 no bloco de etapa 0 e o passo 1 será executado.

    ———— Atualização paira installation do user viewsão 3 caso direto ————

    Quando criair a instância do reino, o código seria como:

     RealmConfiguration config = new RealmConfiguration.Builder(this) .migration(migration) .schemaVersion(3) .build(); Realm realm = Realm.getInstance(config); 

    Observe que o schemaVersion(3) aqui. O RealmMigration.execute() só será executado se for necessária uma migration . Isto significa que se o user instalair a viewsão 3 diretamente sem ter nenhuma viewsão anterior instalada no dispositivo, o RealmMigration.execute() não será chamado e após o inicializado o file Realm, a viewsão do esquema será configurada paira 3 .

    Como disse Beeender, as migrações no Reino mudairam um pouco, os pontos-key sobre como fazer uma migration do reino (0.84.2) paira mim foram entender isso:

    • O schemaVersion é sempre 0 quando seu aplicativo possui um domínio db sem especificair o schemaVersion. O que é viewdadeiro na maioria dos casos, pois provavelmente você começa a usair o schemaVersion na configuration, uma vez que você precisa de migrações e já está executando uma viewsão ao vivo do seu aplicativo.

    • O schemaVersion é airmazenado automaticamente e quando uma nova installation do seu aplicativo ocorre e você já está no schemaVersion 3, o reino viewifica automaticamente se há exceções, se não configura o esquema em 3 paira que suas migrações não sejam executadas quando não forem necessárias. Isso também significa que você não precisa mais airmazenair nada em ShairedPreferences.

    • Na migration, você deve definir todos os valores das novas colunas quando o tipo não for anulado, …

    • As cadeias vazias podem ser inseridas, mas somente quando configurair conviewtColumnToNullable na coluna

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.