Android Studio
[Android Studio] 네트워크 라이브러리 _ Retrofit2 사용하기
처카푸
2024. 6. 14. 18:04
네트워크 라이브러리 _ Retrofit2
1. retrofit랑 액티비티랑 연결
Retrofit retrofit = NetworkClient.getRetrofitClient(현재 엑티비티.this);
2. 함수를 쓰기 위해 API 개발
VideoApi api = retrofit.create(VideoApi.class);
3. API 만들기
- app/java/com.---/api 디렉터리 만들기
- 관련 이름명으로 API Interface 만들기
- 안에 POSTMAN을 보고 잘 작동되는 서버의 키를 넣어준다.
더보기
GET 방식
예시
// 유튜브에 검색하는 API
// HTTP Method 써주고, 그 안에는 경로를 써준다.
@GET("/youtube/v3/search")
Call<VideoList> SearchVideo(@Query("key") String key,
@Query("part") String part,
@Query("maxResults") int maxResults,
@Query("order") String order,
@Query("type") String type,
@Query("q") String q);
// 함수의 리턴 데이터 타입은, Call 안에, 응답으로 받을 클래스를 넣어준다.
// 내 메모 리스트 가져오는 API
@GET("/memos")
Call<MemoList> getMemoList(@Header("Authorization") String token);
POST 방식
예시
// 회원가입 API
// 함수명을 작성해주고, 보낼 데이터는 파라미터에 작성하고,
// 받을 데이터는 리턴 타입(Call<>)에 작성한다.
@POST("/users/register")
Call<UserRes> register(@Body User user);
// 로그인 API
@POST("/users/login")
Call<UserRes> login(@Body User user);
// 내 메모 생성하는 API
@POST("/memos")
Call<Res> addMemo(@Header("Authorization") String token, @Body Memo memo);
DELETE 방식
예시
// 내 메모 삭제하는 API
@DELETE("/memos/{memoId}")
Call<Res> deleteMemo(@Path("memoId") int memoId, @Header("Authorization") String token);
PUT 방식
예시
// 내 메모 수정하는 API
@PUT("/memos/{memoId}")
Call<Res> updateMemo(@Path("memoId") int memoId, @Header("Authorization") String token, @Body Memo memo);
- 응답 온 데이터를 받아서 저장해 줄 model 디렉터리를 만들고,
안에 변수로 작성해 준다. (Res.java 파일은 실행 결과를 응답해 주는 것을 받아주기 위해 만든 클래스이다.)
예시
public class Res {
public String result;
}
- 액티비티 코드에 API 인터페이스 이용해서 API 만들기
// API 를 만들고
Call<VideoList> call = api.SearchVideo(API 안에 들어갈 데이터 넣기(예) "Bearer "+token, ...));
4. 네트워크로 호출한다.
// 네트워크로 호출한다.
call.enqueue(new Callback<VideoList>() {
// 자동완성 코드
@Override
public void onResponse(Call<VideoList> call, Response<VideoList> response) {
// 네트워크 통신 성공
// 에러 체크
// response.isSuccessful() 200ok 일때 코드
if(response.isSuccessful()){
//잘 받아 왔을 때, 실행할 코드 작성
} else if (response.code() == 400) {
// response.code() 는 HTTP 상태코드가 들어있다.
} else if (response.code() == 500) {
} else {
}
}
@Override
public void onFailure(Call<VideoList> call, Throwable throwable) {
// 네트워크 통신 실패
// 유저한테 알려주고, 로그 찍고 리턴
}
});