Android - отображать панель загрузки при вызове API с модификацией - PullRequest
0 голосов
/ 22 апреля 2019

В моем приложении я использую модификацию 2 для получения данных из API. У меня нет проблем по этому поводу. Проблема в том, что я хочу отображать панель загрузки во время этого выполнения. Код такой

Call<MainInvestorProducts> call = apiInterface.getUseraccounts("Bearer "+bearerToken);

    mkLoader.setVisibility(View.VISIBLE);

    call.enqueue(new Callback<MainInvestorProducts>() {
        @Override
        public void onResponse(Call<MainInvestorProducts> call, Response<MainInvestorProducts> response) {

            // If success response set the textViews
            if (response.code() == 200) {

                retrievedData = response.body();


                //else display error message
            }else if (response.code() == 401) {
                Toasty.error(getApplicationContext(), getString(R.string.expired_token),Toasty.LENGTH_LONG).show();
                finish();
            }
        }

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

        }
    });

    mkLoader.setVisibility(View.GONE);

Проблема в том, что mkloader никогда не появляется.

Мой код клиента APIC

public class APIClient {

public static Retrofit retrofit = null;

public static Retrofit getClient(){

    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();

    retrofit = new Retrofit.Builder()
            .baseUrl("https://api-test01.moneyboxapp.com")
            .addConverterFactory(GsonConverterFactory.create())
            .client(client)
            .build();

    return retrofit;
}

}

А это пример интерфейса

@Headers({
        "AppId: 3a97b932a9d449c981b595",
        "Content-Type: application/json",
        "appVersion: 5.10.0",
        "apiVersion: 3.0.0"
})
@POST("/users/login")
Call<MainUserLogin> logInUser(@Body LoginBody loginBody);

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019
    mkLoader.setVisibility(View.VISIBLE);
    Call<MainInvestorProducts> call = apiInterface.getUseraccounts("Bearer "+bearerToken);

call.enqueue(new Callback<MainInvestorProducts>() {
    @Override
    public void onResponse(Call<MainInvestorProducts> call, Response<MainInvestorProducts> response) {

        // If success response set the textViews
        if (response.code() == 200) {

            retrievedData = response.body();


            //else display error message
        }else if (response.code() == 401) {
            Toasty.error(getApplicationContext(), getString(R.string.expired_token),Toasty.LENGTH_LONG).show();
            finish();
        }
    }

    @Override
    public void onFailure(Call<MainInvestorProducts> call, Throwable t) {
    mkLoader.setVisibility(View.GONE);
    }
});

вам просто нужно сделать загрузчик видимым для VISIBLE перед вызовом API, и в случае, если API будет успешным или неудачным, вы установите видимость GONE

0 голосов
/ 22 апреля 2019

Перед вызовом API вы должны начать показывать загрузчик (будьте уверены, что вызов API будет происходить), и после его завершения отклоните это

...