개발학습일지

[Android Studio] 네트워크 라이브러리 _ Retrofit2 사용하기 본문

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) {
                // 네트워크 통신 실패
                // 유저한테 알려주고, 로그 찍고 리턴

            }
        });