Сетевые вызовы Rx Android делают приложение запаздывающим при переходе назад - PullRequest
1 голос
/ 16 февраля 2020

мое android приложение продолжает отставать от обратной навигации после того, как я реализовал сетевые вызовы. Для сетевых вызовов я использую rxandroid / retrofit. Я пытался исправить это, используя как одиночные и наблюдаемые. И то, и другое делает приложение запаздывающим одинаково. Это мой код при использовании наблюдаемого. Отставание происходит при загрузке данных в просмотрщик. Поэтому я также добавил класс адаптера.

@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();
    }
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);
    }
}

1 Ответ

0 голосов
/ 17 февраля 2020

Попробуйте переместить вызов API из On Resume в OnCreate.

...