Retrofit2 BaseUrl在运行时自动更改

时间:2019-04-01 09:56:29

标签: java android retrofit2

我有一个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 :(得分:0)

在进行API调用并在真实设备上运行客户端应用程序时,应确保firewall已完全关闭。

您可以在此处找到有关如何禁用防火墙https://silicophilic.com/disable-firewall-windows-10/

的一些步骤