RetroFit2 라이브러리 연습한 내용을 정리한 포스팅입니다.
POST방식으로, List가 포함되지 않은 단일 데이터로 이루어진 데이터를 가져오는 예제입니다.
1. Dependencies 추가
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
Project Structure에서 추가하면 편함.
2. 데이터 모델 클래스 생성
public class Model {
@SerializedName(키1)
String 변수1;
@SerializedName(키2)
String 변수2;
public String toString() {
return 변수1 + " / " + 변수2;
}
}
문자열 = JSONObject의 key 값
나중에 GsonConverterFactory에서, 해당 문자열의 키를 가진 데이터를 해당 변수에 넣음.
예를 들어
@SerializedName("result")
String res;
가 의미하는 것은
결과로 받는 JSONObject에서 키 값이 result인 데이터를 res 안에 넣어준다는 것 같다.
키를 못 찾거나 하는 경우엔 기본 값을 넣는 것 같기도..? (String은 null, int는 0으로)
3. Interface 생성
public interface RetroFitInterface {
@FormUrlEncoded
@POST(URL)
Call<Model> 메소드 (@Field(파라미터이름) 데이터타입 변수명, @Field(파라미터이름2) 데이터타입 변수명 ... );
}
@FormUrlEncoded - POST 방식 사용 시 입력해야함
@POST - POST 방식을 사용한다는 의미. 괄호 안에는 연결할 페이지 URL 주소를 입력하면 된다.
나중에 BaseDomain을 입력한다면, 이곳에 입력하는 주소는 BaseDomain 이하의 주소를 입력하면 된다.
Call<Model> XX (@Field()) - 파라미터 값을 함께 보내는 경우에 사용. 뒤의 변수명은 파라미터 값 입력 시 유추할 수 있게 적당하게 넣으면 됨.
ex) Call<Model> test (@Field("MODE") String mode)
※ String 말고 int 형이나 boolean도 자동으로 변환이 되는건지는 내일 실험해 볼 것.
4. 사용(3번과 함께 보면 좋음)
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(기본 도메인 주소)
.addConverterFactory(GsonConverterFactory.create())
.build();
RetroFitInterface callback = retrofit.create(RetroFitInterface.class);
Call<Model> call = callback.메소드(파라미터1, 파라미터2);
call.enqueue(new Callback<Model>() {
@Override
public void onResponse(Call<Model> call, Response<Model> response) {
textView.setText("응답코드 > " + response.code() + " \n데이터 > " + response.body().toString());
}
@Override
public void onFailure(Call<Model> call, Throwable t) {
textView.setText("통신 실패");
}
});
baseUrl(도메인주소) - 통신하려는 페이지 url이 "http://abc.com/topic/" 이라면 "http://abc.com/"이 baseUrl이다. (슬래시는 오류 방지를 위하여 추가함)
enqueue - 비동기식 통신을 할 때 사용
execute - 동기식 통신을 할 때 사용
onResponse
- 통신 성공 시 실행된다.
- 통신이 실패하는 경우, JSON의 파싱에 실패하는 경우에도 호출될 수 있으니, response의 code() 값과 결과값을 확인 후 처리하여야 함.
- 데이터를 가져와서 사용할 때는 response.body() 값을 가져와서 사용.
onFailure
- 완전한 통신 실패 시 실행
onResponse와 onFailure 둘 다 메인Thread에서 실행되므로 별도로 runOnUIThread 메소드 내부에 넣지 않아도 됨.
** 참고 사이트
http://newland435.tistory.com/25
http://yoo-hyeok.tistory.com/79
http://nobase-dev.tistory.com/6
'개발 > Android' 카테고리의 다른 글
productFlavors 추가하기 (같은 패키지 명, 중복 설치) (0) | 2018.08.06 |
---|---|
permission denied for window type 2002 (0) | 2018.07.24 |
Glide 정리 (0) | 2018.06.02 |
안드로이드 번역 API 연동 참고 (0) | 2018.05.31 |
Picasso Target 설정 시 로딩 안되는 문제 (0) | 2018.05.17 |