Как сделать ретрофит звонки с OOP? - PullRequest
1 голос
/ 26 марта 2020

Сегодня я работал над своей домашней работой, которая заключалась в создании простых приложений с вызовами дооснащения и изучении новых вещей для улучшения кода, и каким-то образом я увидел, что есть так много способов написать меньше кода и добиться большего успеха с OOP. Поэтому, чтобы улучшить свой эксперимент с кодом, я пытаюсь сделать вызовы для модификации с помощью OOP. Так что это моя проблема прямо сейчас:

Рассмотрим простой вызов дооснащения с помощью CompositeDisposable (я разрабатываю свои простые с помощью MVP):

    mView.showProgress(1);
    RequestRemainingProductsRequest requestRemainingProductsRequest = new RequestRemainingProductsRequest();
    requestRemainingProductsRequest.distributorId = distributorId;
    requestRemainingProductsRequest.requestCode = requestCode;
    requestRemainingProductsRequest.requestType = 1;

    NetworkCalls.getObservableList();

    compositeDisposable.add(getApi().requestRemainingProducts(requestRemainingProductsRequest)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Consumer<List<Products>>() {
            @Override
            public void accept(List<Products> products) throws Throwable {
                mView.hideProgress(1);
                mView.getRemainingProducts(products);
            }
        }, new Consumer<Throwable>() {
            @Override
            public void accept(Throwable throwable) throws Exception {
                mView.hideProgress(1);
                mView.showLog(throwable.getMessage().toString());
            }
        }));

И еще один вызов дооснащения без CompositeDisposable:

    ProductSellerRequest productSellerRequest = new ProductSellerRequest();
    productSellerRequest.centralId = centralsList.get(i).requestCentralId;
    productSellerRequest.requestType = 0;
    productSellerRequest.productId = Constant.currentProduct.productId;
    getApi().checkProductExistInRequest(productSellerRequest)
            .enqueue(new Callback<ProductSellerCallback>() {
                @Override
                public void onResponse(Call<ProductSellerCallback> call, Response<ProductSellerCallback> response) {

                    hideProgress(myViewHolder);
                    showAddDialog(myViewHolder, v, response, i);
                }

                @Override
                public void onFailure(Call<ProductSellerCallback> call, Throwable t) {

                    hideProgress(myViewHolder);
                }
            });

Допустим, я создал класс java с NetworkCalls.java и создал 2 пустоты, подобные этому:

public static void getObservableList()
{

}

public static void getWithoutObservableList()
{

}

Как обработать мой ответ на возврат на мой Presenter/Activity?

Вот как я использую StringBuilder и возвращаю свою строку, но я пытаюсь сделать похожий способ сделать хранилище для моих сетевых вызовов, а затем узнать все, что я должен знать о Repository Pattern.

public static String TotalPriceStringBuilder(int Price){
    String DecimalPrice = String.format("%,d", Price);

    String FinalString = new StringBuilder("Price : ").append(DecimalPrice).append(" $").toString();
    return String.valueOf(FinalString);
}

Это то, что я пробовал, но я все еще не знаю, как это исправить или заставить его работать, что вернуть, как вернуть и т. Д. c. ..:

private static ApiClient mApi;

private List<Products> receivedProducts;
private int hideProgress;
private boolean status;
private String message;

public void getObservableList(RequestRemainingProductsRequest requestRemainingProductsRequest, CompositeDisposable compositeDisposable)
{
    compositeDisposable.add(getApi().requestRemainingProducts(requestRemainingProductsRequest)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Consumer<List<Products>>() {
                @Override
                public void accept(List<Products> products) throws Throwable {
                    hideProgress = 1;
                    receivedProducts = products;
                    status = TRUE;
                }
            }, new Consumer<Throwable>() {
                @Override
                public void accept(Throwable throwable) throws Exception {
                    hideProgress = 1;
                    status = FALSE;
                    message = throwable.getMessage().toString();
                }
            }));

    if (status == TRUE) {
        return hideProgress, receivedProducts, status;
    } else {
        return hideProgress, message, status;
    }
}


public ApiClient getApi() {
    if (mApi == null) {
        mApi = ApiService.getClient().create(ApiClient.class);
    }
    return mApi;
}

Если я использую метод static, я получу кучу ошибок, например, невозможно отреагировать из контекста stati c или et c ...

...