gpt4 book ai didi

android - 我多次调用 Livedata 观察器时遇到问题

转载 作者:行者123 更新时间:2023-12-04 14:15:08 25 4
gpt4 key购买 nike

这是我的 CartProductItemDao。

    @Dao
public interface CartProductItemDao {

@Query("select * from CartProductItem where product__category__id = :id")
LiveData<List<CartProductItem>> getCartProductItemList(int id);

@Query("select * from CartProductItem where product__id in (:items)")
LiveData<List<CartProductItem>> getAllProductsSectionItem(ArrayList<Integer> items);

@Query("Select * from CartProductItem where product__fav_market_id =:id")
LiveData<List<CartProductItem>> geAllCartProductItemList(int id);
}

这是我的 CartProductItemRepository。

    public class CartProductItemRepository {
LiveData<List<CartProductItem>> cartProductItemList;
CartProductItemDao cartProductItemDao;

public CartProductItemRepository(Application application) {
TreaderOnlineDatabase treaderOnlineDatabase=TreaderOnlineDatabase.getInstance(application);
cartProductItemDao=treaderOnlineDatabase.cartProductItemDao();
}

public LiveData<List<CartProductItem>> getCartProductItemList(int cat_id) {
cartProductItemList= cartProductItemDao.getCartProductItemList(cat_id);
return cartProductItemList;
}
}

这是我的 CartProductItemViewModel。

    public class CartProductItemViewModel extends AndroidViewModel {
LiveData<List<CartProductItem>> cartProductItemList;
LiveData<List<CartProductItem>> productSectionItemList;
LiveData<List<CartProductItem>> allCartProductItem;
CartProductItemRepository cartProductItemRepository;

SharedPreferenceClass sharedPreferenceClass;

public CartProductItemViewModel(@NonNull Application application) {
super(application);
cartProductItemRepository=new CartProductItemRepository(application);
sharedPreferenceClass=new SharedPreferenceClass(getApplication());
//cartProductItemList=cartProductItemRepository.getCartProductItemList();
}

public LiveData<List<CartProductItem>> getCartProductItemList(int id) {
cartProductItemList=cartProductItemRepository.getCartProductItemList(id);
return cartProductItemList;
}
}

然后我从 fragment 内部调用了 getCartProductItemList(cat_is)这是代码

    @Override
public void recyclerViewOnClick2() {
CartProductItemViewModel cartProductItemViewModel;
cartProductItemViewModel=ViewModelProviders.of(this).get(CartProductItemViewModel.class);
int x=sharedPreferenceClass.getSharedPreferenceCatId();
cartProductItemViewModel.getCartProductItemList(x).observe(this, new Observer<List<CartProductItem>>() {
@Override
public void onChanged(List<CartProductItem> cartProductItems) {
product_categoriesFragmentAdpter.setArrayList(cartProductItems, getContext());
}
});
}

当我对表进行更新或删除或插入多次调用的观察者时出现的问题。

最佳答案

Fragment 的生命周期可以长于创建的 View 的生命周期。将 this 替换为 viewLifecycleOwner 以观察您的 liveData 以避免双重订阅:

cartProductItemViewModel.getCartProductItemList(x).observe(viewLifecycleOwner, new Observer<List<CartProductItem>>() {
@Override
public void onChanged(List<CartProductItem> cartProductItems) {
product_categoriesFragmentAdpter.setArrayList(cartProductItems, getContext());
}
});

确保在使用 viewLifecycleOwner 时,在 onCreateView() 之前不观察 liveData。

来源:https://developer.android.com/reference/androidx/fragment/app/Fragment.html#getViewLifecycleOwner()

https://www.youtube.com/watch?v=pErTyQpA390&feature=youtu.be

关于android - 我多次调用 Livedata 观察器时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60919401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com