SSM*_*SMI 5 android android-room android-livedata android-viewmodel android-architecture-components
所以我正在使用Room和LiveData编写应用程序。这是一个财务应用程序。我有两个要合并的实体,即Payee和Transaction。 交易有一个ForeignKey将其链接到Payee。我一直在使用Room中的LiveData,一直到(Daos,Repository,ViewModels)到我的UI(片段)。
在到达“片段”级别之前,我想在某种程度上合并这两个数据集,但不确定如何去做。我知道我可以直接从数据库中使用查询创建POJO,但我有点想在其中包含一个带有Payee的Transaction Object,而不仅仅是两个字段中的所有字段。
有没有办法做到这一点?也许使用其中一种转换(map或switchMap)?还是使用MediatorLiveData?他们可以观察不止一种数据类型(例如LiveData和LiveData)吗?
Payee.java
@Entity
public class Payee {
@PrimaryKey (autoGenerate = true)
@ColumnInfo (name = "id")
private int id;
. . .
}
Run Code Online (Sandbox Code Playgroud)
Transaction.java
@Entity (foreignKeys =
@ForeignKey(entity = Payee.class,
parentColumns = "id",
childColumns = "payee_id",
onDelete = RESTRICT))
public class Transaction {
@PrimaryKey (autoGenerate = true)
@ColumnInfo (name = "id")
private int id;
@ColumnInfo (name = "payee_id")
private int payeeId;
@Ignore
private Payee payee;
. . .
}
Run Code Online (Sandbox Code Playgroud)
小智 5
包含收款人的交易对象将由 @Embedded 注释生成,独立于您的 DAO 查询中的附加列。
还有其他与您的问题相关的场景:
使用全局执行器池,如带有AppExecutor类的Google GithubBrowserSample 示例中所示,存储库类中的嵌套查询将如下所示:
public LiveData<QuotationCustomer> loadQuotationDetails(int quotationId) {
LiveData<QuotationCustomer> quotationLiveData =
quotationDao.getQuotationCustomer(quotationId);
LiveData<QuotationCustomer> result =
Transformations.switchMap(quotationLiveData, quotation -> {
MutableLiveData<QuotationCustomer> mutableResult = new MutableLiveData<>();
appExecutors.diskIO().execute(() -> {
quotation.quotationDetList =
quotationDetDao.getQuotationDetsByQuotationIdSync(quotationId);
mutableResult.postValue(quotation);
});
return mutableResult;
});
return result;
}
Run Code Online (Sandbox Code Playgroud)
在前面的代码示例中,getQuotationDetsByQuotationIdSync DAO 方法返回一个普通列表(不是 LiveData>),而 QuotationCustomer POJO 扩展了一个 @Entity 注释类,并具有如下定义的 quoteDetList 属性:
@Ignore
public List<QuotationDetProductUnit> quotationDetList;
Run Code Online (Sandbox Code Playgroud)
在您的情况下,将 QuotationCustomer 替换为 Payee,将 QuotationDetProductUnit 替换为 Transaction。
| 归档时间: |
|
| 查看次数: |
2362 次 |
| 最近记录: |