Несколько индикатор выполнения в нескольких просмотра во время вызова API - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь сделать общую реализацию для добавления и отображения индикатора выполнения во фрагменте / активности, когда есть несколько вызовов.

Please check image for reference

У кого-нибудь есть лучшее решение, чем использование двух ссылок на индикатор выполнения и переключение его видимости?Реализация должна быть универсальной, которая может применяться к любым представлениям.

1 Ответ

0 голосов
/ 19 февраля 2019

Добавьте этот интерфейс в свой проект ....

public interface RetrofitCallback {

    <T> void getSuccessCallBack(Response<T> response, int position);

    void getErrorCallBack(String message, int position);

}

добавьте эти методы в свою утилиту или RetrofitUtility.

public static <T> void callRetrofit(final Context context, final Fragment fragment, Call<T> call, final int position, final RetrofitCallback callback) {

        final ProgressDialog pDialog = CommonMethod.showProgressDialog(context, context.getResources().getString(R.string.loading));// progress for whole application
        call.enqueue(new Callback<T>() {
            @Override
            public void onResponse(Call<T> call, Response<T> response) {
                pDialog.dismiss();
                if (response.isSuccessful()) {
                    ResultBody result = (ResultBody) response.body();
                    if (result.isSuccess())
                        callback.getSuccessCallBack(response, position);
                    else
                        callback.getErrorCallBack(result.getMessage(), position);

                } else
                    Toast.makeText(context, response.message(), Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFailure(Call<T> call, Throwable t) {
                pDialog.dismiss();
                if (CommonMethod.checkconnection(context)) { // checking internet connection
                    Toast.makeText(context, "Server_error", Toast.LENGTH_SHORT).show();
                } else {
                    CommonMethod.showconnectiondialog(context, fragment);
                }
            }
        });
    }

  public static Retrofit getClient() {

        if (retrofit == null) {
            retrofit = new Retrofit.Builder()
                    .baseUrl("XXXXXXXXXXXXX")
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }

        return retrofit;
    }

Все API Retrofit

public interface RetrofitApi {

    @POST("allData")
    Call<UserData> getAllData();

}

Реализуйте RetrofitCallback в своей деятельности и фрагменте

Назовите Api следующим образом

 Call<UserData> call = ApiClient.getClient().create(RetrofitApi.class).getAllData();
 ApiClient.callRetrofit(context, this, call, 0, this);

, и вы получите данные из методов переопределения RetrofitCallback ниже

 @Override
    public <T> void getSuccessCallBack(Response<T> response, int position) {
        UserData userData = ((UserData) response.body());
        // do your operation over here 
    }

    @Override
    public void getErrorCallBack(String message, int position) {
        Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
    }

Здесьэто файл всех моделей ....

ResultBody.class

public class ResultBody {
    private String message;
    private boolean success;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }
}

UserData.class

public class UserData extends ResultBody {

    private User userData;



    public User getUserData() {
        return userData;
    }

    public void setUserData(User user) {
        this.userData = user;
    }
}

Дайте мне знать, если вы застряли где-нибудь .....

Относительные сообщения или вопросы

Android: динамически передавайте класс модели для модификации обратного вызова

...