2016-04-28 8 views
1

マイアプリはSongVersionsは多くのTracksを持つデータベースを使用し、多くの企業アップデートする方法。このman-to-manx関係はgreendaoによって生成され、これまでのところうまく動作します。のは、それをミュートするとしましょう - -Greendao:

は、しかし、今、私はトラックを更新しようとすると、更新は次のアプリの開始までwokringされます。これは、udpateがキャッシュされたトラックのリストにのみ反映されますが、データベースには永続化されないためです。

はここで、これまで(動作しない)

 
// iterate through tracks 
for (Track track : mSongVersion.getTrackList()) { 

    if (trackId.equals(track.getId())) { 
    // mute specific track 
    track.setMuted(muted); 
    mSongVersion.update(); 
    } 
} 

SongVersionTrackがgreendaoによってgenertated entitiyクラスである私のコードです。方法が、全く更新()Track持っていない - - SongVersion)は(更新を有する方法。だから私はSongVersion#update()を使って "全部"を更新して特定のトラックを更新しなければならないと考えていました。 しかし、この呼び出しはそのトラックの変更を無視してSongVersionを更新するだけです...

また、トラックリストをリセットして、キャッシュされていない値が干渉していないことを確認しました。 。

EDIT:

ここに役立つかもしれないいくつかのコードです。 (greendaoによって生成された!)

SongVersion :データベース生成するJavaの

 

/** Used for active entity operations. */ 
private transient SongVersionDao myDao; 

/** called by internal mechanisms, do not call yourself. */ 
public void __setDaoSession(DaoSession daoSession) { 
    this.daoSession = daoSession; 
    myDao = daoSession != null ? daoSession.getSongVersionDao() : null; 
} 

public void update() { 
    if (myDao == null) { 
    throw new DaoException("Entity is detached from DAO context"); 
    }  
    myDao.update(this); 
} 

パーツ:

 
public static void main(String[] args) throws Exception { 
    Schema schema = new Schema(1, "my.app.database"); 

    Entity songVersion = schema.addEntity("SongVersion"); 
    Entity track = schema.addEntity("Track"); 

    // SongVersion fields w/o relations 
    songVersion.setHasKeepSections(true); 
    songVersion.addIdProperty().autoincrement(); 
    songVersion.addStringProperty("name").notNull(); 

    // Track fields w/o relations 
    track.setHasKeepSections(true); 
    track.implementsInterface("Comparable"); 
    track.addIdProperty().autoincrement(); 
    track.addBooleanProperty("muted").notNull(); 

    // relations 
    Property songVersionId = 
    track.addLongProperty("songVersionId").notNull().getProperty(); 
    songVersion.addToMany(track, songVersionId); 
} 

答えて

1

私はあなたが変更した後にトラックを更新するためにTrackDAOを使用すべきだと思いますリストインスタンス。このようなもの:

daoMaster = new DaoMaster(db); 
daoSession = daoMaster.newSession(); 
trackDao = daoSession.getTrackDao(); 

// iterate through tracks 
for (Track track : mSongVersion.getTrackList()) { 

    if (trackId.equals(track.getId())) { 
    // mute specific track 
    track.setMuted(muted); 
    trackDao.update(track); 
    } 
} 
+0

これはまさに私の問題です。私はTrackDao(AbstractDaoの継承した更新メソッド)からupdate(Object)メソッドを使用することができましたが、なぜ生成されたSongVersionが便利なupdate()メソッドをmyDaoフィールドとTrackではない。 – muetzenflo

+0

私はtrackDaoを使ってそれをテストしました。方法...それはSongVersion.update()メソッドの実装上の外観をとらずに言うことは容易ではありません – muetzenflo

+0

- ()更新を生成したが、私はまだ不足しているについての説明のために幸せになると思います。コードのこの部分を追加できますか? –