Retrofit2 BaseUrl автоматически меняется во время выполнения - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть приложение для Android, которое использует retrofit2 для выполнения вызовов API, но когда я пытаюсь вызвать сервер, эта ошибка выдается java.net.ConnectException: Failed to connect to /192.168.1.5:3000. Когда я настраиваю свой API-клиент для модернизации, я явно задаю другой базовый URL-адрес для приложения, но он всегда показывает эту ошибку.

ApiClient.java

public class ApiClient {

private static Retrofit retrofit;

public static Retrofit getRetrofitInstance() {

    if (retrofit == null) {

        final OkHttpClient client = setTokenToHeader();

        retrofit = new retrofit2.Retrofit.Builder()
                .client(client)
                .baseUrl("http://192.168.1.3:3000/")
                //.baseUrl(BuildConfig.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    return retrofit;
}

private static OkHttpClient setTokenToHeader() {

    return new OkHttpClient.Builder().addInterceptor(new Interceptor() {

        @NonNull
        @Override
        public Response intercept(@NonNull Chain chain) throws IOException {

            Request newRequest = chain.request()
                    .newBuilder()
                    .addHeader("Authorization", "Bearer " + UserInfo.getToken())
                    .build();
            return chain.proceed(newRequest);
        }
    }).build();
}
}

Это функция, когда я делаю серверный вызов, но я попытался отладить его, и когда я вижу значение retrofit.baseUrl(), оно дает "http://192.168.1.5:3000", и у меня нет этого IP-адреса во всем моем проекте.

private void login() {

    final Retrofit retrofit = ApiClient.getRetrofitInstance();
    Log.e("URL: ", retrofit.baseUrl());
    final userApiInterface apiInterface = retrofit.create(userApiInterface.class);
    // Body
    final User loginUser = new User();
    loginUser.setUserEmail(Email.getText().toString());
    loginUser.setPassword(Password.getText().toString());
    final Call<User> call = apiInterface.Login(loginUser);

    call.enqueue(new Callback<User>() {

        @Override
        public void onResponse(@NonNull Call<User> call, @NonNull Response<User> response) {
            handleLoginResponse(response);
        }

        @Override
        public void onFailure(@NonNull Call<User> call, @NonNull Throwable t) {
            customToast.internalError();
            Log.e("Retrofit error: ", String.valueOf(t));
        }
    });
}

1 Ответ

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

Когда вы делаете вызов API и запускаете свое клиентское приложение на реальном устройстве, вы должны убедиться, что ваш firewall полностью отключен.

Здесь вы можете найти некоторые шаги о том, какотключить брандмауэр https://silicophilic.com/disable-firewall-windows-10/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...