진행 중인 프로젝트에서 문제가 있는 코드가 있었다.
내 기록용 포스팅이기 때문에 간단한 설명을 적자면,
안드로이드 -> 서버로 이미지 전송을 하고, 이미지 처리를 하는 과정에서
딥러닝 모델로 처리를 하는데, 이미지 처리 시간이 길었다.
그래서 이미지가 처리되고 안드로이드로 response를 보냈을 때,
이미 안드로이드 client 측에서는 connection error로 인식을 하는 오류가 있었다.
그래서 retrofit 으로 timeout 조건을 추가해주려고 한다.
이 부분은
1) 이미지 처리가 완료되기 전 해당 계정으로 이미지를 또 보내면,
현재 구현 상에서 기존의 데이터가 제대로 삭제되지 않는 문제를 해결하기 위해서도 필요하고,
2) 이미지 처리가 완료되기 전에 DB 데이터를 조회해서 아직 처리되지 않은 이미지를 참조하는 문제를 해결하기 위해서도 필요하다.
기존 Retrofit object를 생성해서 서버로 보내는 과정 이전에 okhttp3 로 timeout을 setting해줬다.
// timeout setting 해주기
OkHttpClient okHttpClient = new OkHttpClient().newBuilder()
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS)
.build();
// Retrofit 객체를 생성하고 이 객체를 이용해서, API service 를 create 해준다.
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl("https://your_server_ip_address")
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build();
Retrofit이 dependency에 추가돼있어야 한다.
implementation 'com.squareup.retrofit2:retrofit:2.6.1'
implementation 'com.squareup.retrofit2:converter-gson:2.6.1'
결과적으로 기존의 timeout 시간 때문에 connection error가 발생하는 오류가 없어졌다.
REFERENCE
1. okhttp3 라이브러리를 사용해서 timeout 시간을 지정해주고, okhttp 객체를 retrofit build 과정에 포함해준다.
stackoverflow.com/questions/29380844/how-to-set-timeout-in-retrofit-library
'모바일앱 프로젝트' 카테고리의 다른 글
안드로이드 Spinner (ComboBox, Select input) 만들기 (0) | 2021.03.30 |
---|---|
안드로이드 로딩 화면 만들기 (java) (0) | 2021.03.23 |
안드로이드 이미지 서버로 전송 시 회전하는 문제 해결하기 (0) | 2021.03.20 |
AWS killed (0) | 2021.03.18 |
AWS RDS 사용하기 (2) (0) | 2021.03.15 |
댓글