[Android] retrofit2 사용 방법

원준·2023년 7월 21일

Android Studio

목록 보기
31/40

기본 설정은 했니?

  • 우선적으로 셋팅해야하는 부분이 있다.
  • 안했다면 이전 포스팅에서 하고 오자. [기본 설정]

기본 사용 방법

  • Retrofit의 사용 방법은 GET, POST, PUT, DELETE 상관없이 큰 틀은 동일하다.

  • 우선 POST를 기준으로 사용 방법에 대해 설명하고, 나머지를 설명하겠다.

    1. 레트로핏 변수 생성

    • 레스로핏을 사용하겠다고 메모리에 저장한다.
      Retrofit retrofit = NetworkClient.getRetrofitClient(UserRegisterActivity.this);

    2. 사용할 API 패키지 작성

    • 우선 사용할 API에 관련해서 인터페이스를 만든다.

    • 기준은 User를 기준으로 API를 사용할 것이니 User로 만들자.

    • 만들어진 API 인터페이스에 코드 작성

      // 유저 관련 API
      public interface UserApi {
      
          // 회원 가입 API
          @POST("/user/create") // 1. 경로 설정
          //리턴타입 함수이름(파라미터)
              // 저장할 공간의 JSON 클래스가 필요하다. 따로 클래스를 만들자.
          Call<UserRes> register(@Body User user);
          //서버로 응답받는 데이터를 리턴타입으로 설정한다. Class를 만들자.
              // POST / GET 등 경로 확인 후
              // 1. 함수이름 설정
              // 2. 필요한 클래스를 새로 만들던가 (User 처럼) 이미 있는 클래스에서 재활용가능하면 재활용 하자.
              // 파라미터에 값 추가
              // 3. 받아주는 리턴 (클래스 작성)
      }

    3. 생성한 API 인터페이스 사용

    • 레트로핏 변수 생성한 다음에 바로 작성해주면된다.
        // API 패키지의 인터페이스 생성
        //      => api 폴더에서 인터페이스 작성
        //    인터페이스 작성 후 API를 만들자.
        UserApi api = retrofit.create(UserApi.class);

    4. 보낼 데이터 준비

    • Adapter를 이용해서 하나의 클래스를 만드는 것처럼 데이터를 주고 받을 Class를 만들어 준다.

    • JSON의 형태를 Class로 만들어서 사용한다고 생각하면 편하다.

    • JSON의 형태를 Class로 자동으로 변환해서 데이터를 주고 받는 형태이기 때문에 JSON의 형태안의 이름과 동일하게 설정해줘야한다.

      public class User {
          // API의 보내는 값들의 이름과 똑같이 설정하자.
          private String email;
          private String password;
          private String nickname;
      
          //네트워크 용 생성자도 만들어준다.
          public User() {
          }
      
          // 회원가입용 생성자
          public User(String email, String password, String nickname) {
              this.email = email;
              this.password = password;
              this.nickname = nickname;
          }
      }

    5. 요청/응답 준비

    //api 요청 시작하면서 메모리 저장
    Call<UserRes> call = api.register(user);

    6. 요청/응답 결과

    	call.enqueue(new Callback<UserRes>() { //실제 요청하는 로직
            @Override
            public void onResponse(Call<UserRes> call, Response<UserRes> response) {
            	 // 네트워크 응답에 성공했을때
                // 에러를 응답받아도 API간의 통신은 성공적이긴 하다.
            	 
                // 200 ok 확인
                if(response.isSuccessful()){ //200이면 true로 적용된다.
    
                }else if(response.code() == 400){ // 특정 통신 코드에 관련해서 처리하고 싶다면
                               // 400코드에 관련해서 처리를  하고 싶다.
                }else{
                    // 200 ok가 아닐경우 실행
                    Log.i("MEMO APP", response.toString());
                }
            }
    
            @Override
            public void onFailure(Call<UserRes> call, Throwable t) {
                   // 네트워크 응답에 실패 했을때
                   	// 요청 자체가 실패할때
            }
       });

헤더에 값 추가해서 보내기

  • API에서 헤더 매게변수를 추가해 받도록 하자.
    @GET("/memo")
      // 헤더에 값 추가하는 방법
      Call<MemoList> getMemoList(@Header("Authorization") String token);
                                              // key      : value

URL에 path id 추가하기

// 메모 삭제
@DELETE("/memo/{memoId}")
Call<ResultRes> delMemo(@Path("memoId") int memoId);

GET Query 사용하기

@GET("/board/follow")
Call<PostRes> getAllPost(@Header("Authorization") String token, @Query("offset") int offset, @Query("limit") int limit);
// "/board/follow?offset=offset&limit=limit"

여러가지 변수를 추가할 수 있다.

  • 데이터를 받는 형태이지만, 결국 Class의 메서드이기 때문에 어렵게 생각 할 필요는 없다.
    // 메모 수정
    @PUT("/memo/{memoId}") // 경로 설정에서 memoId의 id를 path로 추가할 수 잇음
    Call<ResultRes> editMemo(@Header("Authorization") String token, @Body Memo memo, @Path("memoId") int memoId);
profile
공부해보자

0개의 댓글