テーブルが空であることを確認するにはどうすればよいですか?私はアクティビティに保証値または同期戻り値を持っていませんか?MediatorLiveData.getValue()。直接削除後にisEmpty()がfalseを返す
ねえ、私はアーキテクチャのコンポーネントを初めて使いました。 私はその後、私が呼び出す必要がMediatorLiveData、 に 私がする必要があるすべてはバックグラウンドサービスを使用してルームのエンティティのすべての値を削除することで、「AlarmManagerを」MediatorLiveData .. と非常に奇妙な問題を有するpostValue(ヌル) refreshTables()テーブルにデータがないかどうかをチェックし、Webサービスを呼び出して値を挿入します。
すべて正常に動作しますが、削除後にrefreshTables()の呼び出しを見たときに、getValue()。isEmpty()がfalseを返すことがあります。
このことが起こると、データなしでテーブルが残されます。
私は、MediatorLiveDataの観察が遅れていると思います。
注:
1 - 私は削除した後、スレッド(エグゼ)でrefreshTables()を呼び出しています、もちろん、refreshTables()はその執行を使用して実行します。
2-このフォールトは、ほとんど正常に動作して20回ごとに発生します。それはLifeCycleOwner
にLiveDataをキャストすることはできませんので3-私は
、4- TableEntityだけのルームエンティティが私に答えるレストランテーブルに関するフィールド
//the constructor
private DataRepository(AppDatabase database
) {
this.mDatabase = database;
executor = new AppExecutors();
mObserableTables = new MediatorLiveData<>();
mObserableTables.addSource(mDatabase.tableDao().loadAllTables(),
tableEntities -> {
if (mDatabase.getDatabaseCreated().getValue() != null)
mObserableTables.postValue(tableEntities);
});
}
private MediatorLiveData<List<TableEntity>> mObserableTables;
public void refereshTables()
{
executor.networkIO().execute(()->
{
try {
if(mObserableTables.getValue()==null || mObserableTables.getValue().isEmpty()) {//<-the problem
List<TableEntity> tableEntities = new WebserviceCall().getTablesOnline();
mDatabase.tableDao().insertOrReplaceAllTables(tableEntities);
}
}catch (IOException e)
{
Log.d(this.getClass().getName(),e.getMessage());
}
});
}
public void refreshTablesForService()
{
executor.diskIO().execute(()->
{
int deletedRows=mDatabase.tableDao().deleteAllTables();
Log.d(this.getClass().getName()
,"deleted rows from tables= "+String.valueOf(deletedRows));
mObserableTables.postValue(null);
refereshTables();
});
}