2017-09-19 5 views
0

次の表にPrimaryKeyがあります。私はテーブルにいくつかの値を挿入しました。今私は特定の行の特定の値を更新する必要があります。私はgameTypeと行があり、Puzzleとなり、行内のcurrentLevelを更新する必要があります。しかし、私はそれを達成することができません。レルムテーブル内の特定の行を更新する方法

GamesDetailsテーブル:

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()); 
         } 
        }); 

をしかし、値を更新取得されていないと私はこの次のエラーを取得しています:ここで

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; 
    } 
} 

は、私は、テーブル内の特定の行を更新しようとしたものです:

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

テーブル内の特定の行の特定の値を更新するにはどうすればよいですか?

答えて

3

executeTransactionAsyncを呼び出すとき、executeブロックは、バックグラウンドスレッドで実行されます、すべてのレルムはそのスレッドからアクセスオブジェクトはexecuteのPARAMあるレルム・インスタンスからそのスレッド上で照会/作成する必要があります。

GamesDetailのクエリをexecuteブロック内に移動し、残りの部分は正常に動作します。

+0

ありがとうございました。出来た。 – XoXo

関連する問題