簡體   English   中英

在第二個實時數據之后觀察實時數據

[英]Observe Live Data After Second Live Data

我的視圖模型聲明了兩個實時數據:

該場景從存儲庫中獲取兩種方法,以便依賴於第一個實時數據的第二個實時數據輸入參數獲取數據

public class ProductViewModel extends AndroidViewModel {

private LiveData<DataWrapper<GetProductQuery.Product>> productLiveData;
private LiveData<DataWrapper<ArrayList<ProductList>>> vendorProductLiveData;


private ProductRepository repository ;

public ProductViewModel(@NonNull Application application) {
    super(application);
    repository = new ProductRepository();

}

public LiveData<DataWrapper<GetProductQuery.Product>> getProductLiveData(String productId) {
    productLiveData = repository.getProduct(productId);
    return productLiveData;
}

public LiveData<DataWrapper<ArrayList<ProductList>>> getVendorProductLiveData(int vendorId) {
    vendorProductLiveData = repository.getLimitProduct(vendorId);
    return vendorProductLiveData;
} }

在活動中,我想在第一個實時數據之后運行第二個實時數據:

viewModel.getVendorProductLiveData(Integer.parseInt(p.getId())).observe(getActivity(), arrayListDataWrapper -> {

                ArrayList<ProductList> pList = 
  arrayListDataWrapper.getData();
 });



viewModel.getProductLiveData(id).observe(this, productDataWrapper -> {
                p = productDataWrapper.getData();
});



                viewModel.getVendorProductLiveData(Integer.parseInt(p.getId())).observe(getActivity(), arrayListDataWrapper -> {
//do logic after get product

});

您應該在第一個通話中進行第二個通話。 因此,當您收到第一個結果時,便可以使用它進行第二次呼叫

viewModel.getProductLiveData(id).observe(this, productDataWrapper -> {
          p = productDataWrapper.getData();
          viewModel.getVendorProductLiveData(Integer.parseInt(p.getId())).observe(getActivity(), arrayListDataWrapper -> {
                //do logic after get product

            }); 
 });

您應該使用Transformations.switchMap()將第一個LiveData轉換為第二個LiveData使用前一個發射值作為參數。 然后,您可以觀察此轉換后的LiveData以獲得最終結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM