2017-09-19 4 views
0

J'ai le tableau suivant avec un PrimaryKey dedans. J'ai inséré quelques valeurs dans la table. Maintenant, j'ai besoin de mettre à jour une valeur particulière dans une ligne particulière. J'ai une rangée avec gameType comme Puzzle et j'ai besoin de mettre à jour le currentLevel dans la rangée. Mais je ne suis pas capable d'y parvenir.Comment mettre à jour une ligne particulière dans la table de domaine android

GamesDetails table:

public class GamesDetail extends RealmObject { 
    @PrimaryKey 
    private String gameType; 
    private int currentLevel; 
    private int totalLevel; 
    private int totalCoins; 
    private int currentBadge; 

    public String getGameType() { 
     return gameType; 
    } 

    public void setGameType(String gameType) { 
     this.gameType = gameType; 
    } 

    public int getCurrentLevel() { 
     return currentLevel; 
    } 

    public void setCurrentLevel(int currentLevel) { 
     this.currentLevel = currentLevel; 
    } 

    public int getTotalLevel() { 
     return totalLevel; 
    } 

    public void setTotalLevel(int totalLevel) { 
     this.totalLevel = totalLevel; 
    } 

    public int getTotalCoins() { 
     return totalCoins; 
    } 

    public void setTotalCoins(int totalCoins) { 
     this.totalCoins = totalCoins; 
    } 

    public int getCurrentBadge() { 
     return currentBadge; 
    } 

    public void setCurrentBadge(int currentBadge) { 
     this.currentBadge = currentBadge; 
    } 
} 

Voici ce que j'ai essayé de mettre à jour une ligne particulière dans le tableau:

final GamesDetail puzzleGameDetail = realm.where(GamesDetail.class).equalTo("gameType","Puzzle").findFirst(); 
        final int[] nextLevel = {puzzleGameDetail.getCurrentLevel()}; 

        realm.executeTransactionAsync(new Realm.Transaction() { 
         @Override 
         public void execute(Realm realm) { 
          puzzleGameDetail.setCurrentLevel(++nextLevel[0]); 
          realm.copyToRealmOrUpdate(puzzleGameDetail); 
         } 
        }, new Realm.Transaction.OnSuccess() { 
         @Override 
         public void onSuccess() { 
          Log.e(TAG, "Done"); 
         } 
        }, new Realm.Transaction.OnError() { 
         @Override 
         public void onError(Throwable error) { 
          Log.e(TAG,error.getMessage()); 
         } 
        }); 

Mais la valeur ne reçoit pas mis à jour et je reçois ce message d'erreur suivant :

Realm access from incorrect thread. Realm objects can only be accessed on the thread they were created.

Comment puis-je mettre à jour une valeur particulière dans une ligne particulière du tableau?

Répondre

3

Lorsque vous appelez executeTransactionAsync, le bloc execute se déroulera dans un thread d'arrière-plan, tout royaume des objets d'accès de ce besoin de fil pour créer/interrogé sur ce fil de l'instance de royaume qui est le PARAM execute.

Déplacez votre recherche GamesDetail requête à l'intérieur execute bloquer et reste fonctionnera très bien.

+0

Merci. Ça a marché. – XoXo