ViewModel + Livedata +数据绑定+转换...如何?

时间:2018-09-09 15:55:45

标签: android viewmodel android-livedata

我正在尝试将服务器的响应转换为我的数据绑定对象...我对使用livedata的转换如何做到这一点不太了解...

我认为我需要改变一些事情,但是我没有发现需要改变的地方...

:(

当我调用loadSellers()时,不会在switchMap函数上输入

有人可以帮我吗?

public class SellersViewModel extends BaseViewModel {

private EzGasRepository repository;
private MutableLiveData<List<Seller>> sellers;

@Inject
public SellersViewModel(EzGasRepository repository) {
    this.repository = repository;
}

public LiveData<List<Seller>> fetchAllSellers() {
    if (sellers == null) {
        sellers = new MutableLiveData<>();
        loadSellers();
    }
    return sellers;
}

private LiveData<List<Seller>> loadSellers() {
    return Transformations.switchMap(repository.fetchAllSellers(), input -> {
        List<Seller> sellerList = new ArrayList<>();

        for (SellerResponse sellerResponse: input) {
            Seller seller = new Seller();

            seller.setSellerName(sellerResponse.getName());
            seller.setRating(sellerResponse.getRating());
            seller.setProductValue(sellerResponse.getProduct().getValue());
            seller.setSellerAddress(sellerResponse.getAddress().getFormattedAddress());

            sellerList.add(seller);
        }
        return sellers;
    });
}
}

这是我的存储库

public LiveData<List<SellerResponse>> fetchAllSellers() {
    MutableLiveData<List<SellerResponse>> data = new MutableLiveData<>();

    ezGasApi.fetchAllSellers().enqueue(new Callback<List<SellerResponse>>() {
        @Override
        public void onResponse(Call<List<SellerResponse>> call, Response<List<SellerResponse>> response) {
            if(response.isSuccessful()) {
                data.setValue(response.body());
            } else {
                //data.setValue(response.errorBody());
            }
        }

        @Override
        public void onFailure(Call<List<SellerResponse>> call, Throwable t) {
            //data.setValue(t.getMessage());
            Timber.e(t);
        }
    });
    return data;
}

这是我的观点

viewModel.fetchAllSellers().observe(this, response -> {

    });

0 个答案:

没有答案