2017-11-01 9 views
-1

구성된 다른 base을에 연결을 시도하는 것은 RetrofitOkHttp 그때 내가 <code>HttpLoggingInterceptor</code>로 다음과 같은 로그를 얻고 개조

OkHttp: --> GET http://192.168.1.13/api/config 
D/OkHttp: --> END GET 

다음

D/OkHttp: <-- HTTP FAILED: java.net.ConnectException: Failed to connect to /192.168.1.20:8888 
D/OkHttp: <-- HTTP FAILED: java.net.SocketException: Socket closed 

참고 기본 URL 및 URL의 차이에 추가 연결 예외입니다. 나는 이것이 무엇을 일으키는 지 확신하지 못한다. 내 응용 프로그램 서버 URL은 컴파일시 알 수 없기 때문에 런타임에 갱신 어댑터가 작성됩니다. 여기에 관련 코드 난 그냥 setIpAddress 메서드를 호출하여 기본 URL을 변경해야

private void init() { 
    mBuilder = new OkHttpClient.Builder(); 
    // TODO: 08/04/16 might want to remove this in prod 
    mBuilder.hostnameVerifier((s, sslSession) -> true); 

    mBuilder.connectTimeout(15, TimeUnit.SECONDS); 
    mBuilder.readTimeout(15, TimeUnit.SECONDS); 
    mBuilder.writeTimeout(10, TimeUnit.SECONDS); 

    // Add headers 
    mBuilder.interceptors().add(chain -> { 
     Request request = chain.request(); 

     request = request.newBuilder() 
       .build(); 
     return chain.proceed(request); 
    }); 

    // Logging 
    if(BuildConfig.DEBUG) { 
     HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
     interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
     mBuilder.interceptors().add(interceptor); 
    } 

    mGson = new GsonBuilder() 
      .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) 
      .setDateFormat(Constants.DATE_FORMAT) 
      .create(); 

    sDispatcher = new Dispatcher(); 
    sDispatcher.setMaxRequests(10); 
    mBuilder.dispatcher(sDispatcher); 
} 

public void setIpAddress(String ipAddress){ 
    init(); 
    String newBaseUrl = "http://"+ ipAddress; 
    OkHttpClient okHttpClient = mBuilder.build(); 
    mRetrofit = new Retrofit.Builder() 
      .baseUrl(newBaseUrl) 
      .client(okHttpClient) 
      .addConverterFactory(GsonConverterFactory.create(mGson)) 
      .addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io())) 
      .build(); 

    mService = mRetrofit.create(APIService.class); 
} 

매번,

+1

downvote에 대한 이유? –

+0

이것은 오늘 아침 이후로 디버깅하려고하는 진짜 문제입니다. 진짜 이유없이 내 질문에 투표하는 것은 어리 석다! –

답변

0

내가 몇 일 다시이 특정 와이파이 연결에 프록시 설정했다에게 있습니다. 그래서 로그가 다른 IP 주소로 연결을 인쇄하고 그 프록시가 다운 되었기 때문에 API 호출이 실패한 것입니다.