Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android recyclerview RxAndroid网络调用使应用程序在后台导航时滞后_Android Recyclerview_Observable_Retrofit_Androidx_Rx Android - Fatal编程技术网

Android recyclerview RxAndroid网络调用使应用程序在后台导航时滞后

Android recyclerview RxAndroid网络调用使应用程序在后台导航时滞后,android-recyclerview,observable,retrofit,androidx,rx-android,Android Recyclerview,Observable,Retrofit,Androidx,Rx Android,我的android应用程序在实现网络调用后在后台导航方面一直落后。对于网络调用,我使用rxandroid/Reformation。我试着用单一和可观察两种方法来修复它。两者都使应用程序以同样的方式滞后。这是我使用observable时的代码。将数据加载到recyclerviews时发生滞后。因此,我还添加了适配器类 @Override public void onResume() { super.onResume(); getMenuByShopAndCa

我的android应用程序在实现网络调用后在后台导航方面一直落后。对于网络调用,我使用rxandroid/Reformation。我试着用单一和可观察两种方法来修复它。两者都使应用程序以同样的方式滞后。这是我使用observable时的代码。将数据加载到recyclerviews时发生滞后。因此,我还添加了适配器类

@Override
    public void onResume() {
        super.onResume();
        getMenuByShopAndCategoryId(categoryRequest.getId(), Utility.getShop(getActivity()));
    }

    private void getMenuByShopAndCategoryId(int categoryId, int shopId){
        Repository.getInstance()
                .getMenuByShopAndCategoryId(categoryId,shopId)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<Response<MenuResponse>>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        disposable.add(d);
                    }

                    @Override
                    public void onNext(Response<MenuResponse> menuResponse) {
                            //other calculations
                        }
                    }

                    @Override
                    public void onError(Throwable e) {
                        //error handling
                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    @Override
    public void onDestroy() {
        disposable.dispose();
        super.onDestroy();
    }
@覆盖
恢复时公开作废(){
super.onResume();
getMenuByShopAndCategoryId(categoryRequest.getId(),Utility.getShop(getActivity());
}
私有void getMenuByShopAndCategoryId(int categoryId,int shopId){
Repository.getInstance()
.getMenuByShopAndCategoryId(categoryId,shopId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅(新观察员){
@凌驾
认购的公共无效(一次性d){
一次性。添加(d);
}
@凌驾
public void onNext(响应菜单响应){
//其他计算
}
}
@凌驾
公共无效申报人(可丢弃的e){
//错误处理
}
@凌驾
未完成的公共空间(){
}
});
}
@凌驾
公共空间{
一次性的,一次性的;
super.ondestory();
}
公共可观察getMenuByShopAndCategoryId(@NonNull int category\u id,@NonNull int shop\u id){
返回apiService.getMenuByShopAndCategoryId(类别id、店铺id);
}
公共类MenuItemsAdapter扩展了RecyclerView.Adapter{
私人语境;
私有ArrayList menuItemArrayList;
私有ListRowMenuItemsBinding绑定;
私有MenuItemsAdapterHandler MenuItemsAdapterHandler;
公共MenuItemsAdapter(上下文上下文,ArrayList menuItemArrayList){
this.context=上下文;
this.menuitemaraylist=menuitemaraylist;
}
@非空
@凌驾
public MenuItemsAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
binding=DataBindingUtil.inflate(LayoutFlater.from(上下文),R.layout.list\u row\u menu\u items,viewGroup,false);
menuItemsAdapterHandler=新的menuItemsAdapterHandler(上下文);
binding.setHandler(menuItemsAdapterHandler);
配置标签();
返回新的视图持有者(绑定);
}
@凌驾
public void onBindViewHolder(@NonNull MenuItemsAdapter.ViewHolder ViewHolder,int i){
viewHolder.binding.lblItemName.setText(menuItemArrayList.get(i.getMenuName());
viewHolder.binding.lblPrice.setText(“MVR”+String.format(“%.2f”,Double.valueOf(menuItemArrayList.get(i).getSubTotal()));
if(menuItemArrayList.get(i).getAvailability().equals(Constants.AVAILABLE)){
binding.lblAvailability.set(上下文,HuqTypogrphyStyle.CAPS\u按钮\u绿色);
viewHolder.binding.lblAvailability.setText(“可用”);
}否则{
binding.lblAvailability.set(上下文,HuqTypogrphyStyle.CAPS\u按钮\u红色);
viewHolder.binding.lblAvailability.setText(“不可用”);
}
viewHolder.binding.setMenuItem(menuItemArrayList.get(i));
viewHolder.binding.executePendingBindings();
}
@凌驾
public int getItemCount(){
返回menuItemArrayList.size();
}
@凌驾
public int getItemViewType(int位置){
返回位置;
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
ListRowMenuItemsBinding绑定;
公共视图持有者(@NonNull ListRowMenuItemsBinding ListRowMenuItemsBinding){
super(listRowMenuItemsBinding.getRoot());
this.binding=listRowMenuItemsBinding;
}
}
私有void配置标签(){
binding.lblItemName.set(上下文,HuqTypogrphyStyle.H2_标题);
binding.lblPrice.set(context,HuqTypogrphyStyle.BODY_GRAY);
binding.lblavability.set(context,HuqTypogrphyStyle.BODY_GRAY);
}
}

尝试将api调用从on Resume移动到onCreate

尝试将api调用从on Resume移动到onCreate

试过了!没用。我删除了片段转换,并稍微减少了延迟。但我认为这不是解决办法。试过了!没用。我删除了片段转换,并稍微减少了延迟。但我认为这不是解决办法
public Observable<Response<MenuResponse>> getMenuByShopAndCategoryId(@NonNull  int category_id, @NonNull  int shop_id) {
        return apiService.getMenuByShopAndCategoryId(category_id,shop_id);
    }
public class MenuItemsAdapter extends RecyclerView.Adapter<MenuItemsAdapter.ViewHolder> {
    private Context context;
    private ArrayList<MenuResponse.MenuRequest> menuItemArrayList;

    private ListRowMenuItemsBinding binding;
    private MenuItemsAdapterHandler menuItemsAdapterHandler;

    public MenuItemsAdapter(Context context, ArrayList<MenuResponse.MenuRequest> menuItemArrayList) {
        this.context = context;
        this.menuItemArrayList = menuItemArrayList;
    }

    @NonNull
    @Override
    public MenuItemsAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        binding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.list_row_menu_items, viewGroup, false);
        menuItemsAdapterHandler = new MenuItemsAdapterHandler(context);
        binding.setHandler(menuItemsAdapterHandler);

        configureLabels();

        return new ViewHolder(binding);
    }

    @Override
    public void onBindViewHolder(@NonNull MenuItemsAdapter.ViewHolder viewHolder, int i) {
        viewHolder.binding.lblItemName.setText(menuItemArrayList.get(i).getMenuName());
        viewHolder.binding.lblPrice.setText("MVR " + String.format("%.2f", Double.valueOf(menuItemArrayList.get(i).getSubTotal())));
        if (menuItemArrayList.get(i).getAvailability().equals(Constants.AVAILABLE)){
            binding.lblAvailability.set(context, HuqTypogrphyStyle.CAPS_BUTTON_GREEN);
            viewHolder.binding.lblAvailability.setText("AVAILABLE");
        } else {
            binding.lblAvailability.set(context, HuqTypogrphyStyle.CAPS_BUTTON_RED);
            viewHolder.binding.lblAvailability.setText("NOT AVAILABLE");
        }
        viewHolder.binding.setMenuItem(menuItemArrayList.get(i));
        viewHolder.binding.executePendingBindings();
    }

    @Override
    public int getItemCount() {
        return menuItemArrayList.size();
    }

    @Override
    public int getItemViewType(int position) {
        return position;
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        ListRowMenuItemsBinding binding;

        public ViewHolder(@NonNull ListRowMenuItemsBinding listRowMenuItemsBinding) {
            super(listRowMenuItemsBinding.getRoot());

            this.binding = listRowMenuItemsBinding;
        }
    }

    private void configureLabels() {
        binding.lblItemName.set(context, HuqTypogrphyStyle.H2_HEADING);
        binding.lblPrice.set(context, HuqTypogrphyStyle.BODY_GRAY);
        binding.lblAvailability.set(context, HuqTypogrphyStyle.BODY_GRAY);
    }
}