본문 바로가기
Android Studio

[Android Studio] Retrofit2 라이브러리를 이용한 POST로 API 호출하기

by dong_su 2024. 1. 4.

 

api 패키지 안에 사용할 api 들에 맞게 인터페이스를 생성한다.

유저에 관한 api이기 때문에 UserApi 인터페이스 생성한다.


public interface UserApi {

    // 회원가입 API
    @POST("/user/register")
    Call<UserRes> register(@Body User user);
}

httpmethod(path)

Call<반환타입> 함수명(@Body 보낼 데이터 =  클래스 객체로

 

위 형식으로 함수를 생성한다.

 

그러기 위해선 보낼 객체와 받을 객체가 필요하기 때문에,

model 패키지에 User, UserRes 클래스를 생성한다.

public class User {
    public String email;
    public String password;
    public String nickname;

    public User(){

    }

    public User(String email, String password, String nickname) {
        this.email = email;
        this.password = password;
        this.nickname = nickname;
    }
}
public class UserRes {
    public String result;
    public String access_token;
}

위 클래스의 변수들은 각각 서버에 요청, 응답 할 때의 변수명, 결과 문자열과 같아야 한다.

 

요청, 응답 예시


통신 코드

// 1. retrofit 변수 생성
Retrofit retrofit = NetworkClient.getRetrofitClient(RegisterActivity.this);

// 2. api 패키지에 있는 interface 생성
UserApi api = retrofit.create(UserApi.class);

// 3. 보낼 데이터 만든다 -> 클래스 객체 생성
User user = new User(email, password, nickname);

// 4. api 호출
Call<UserRes> call = api.register(user);

// 5. 서버로부터 받은 응답을 처리하는 코드 작성
call.enqueue(new Callback<UserRes>() {
    @Override
    public void onResponse(Call<UserRes> call, Response<UserRes> response) {
        dismissProgress();

        // 서버에서 보낸 응답이 200 OK 일때 처리하는 코드
        if (response.isSuccessful()){
            UserRes userRes = response.body();

            SharedPreferences sp = getSharedPreferences(Config.PREFERENCE_NAME, MODE_PRIVATE);
            SharedPreferences.Editor editor = sp.edit();
            editor.putString("token", userRes.access_token);
            editor.apply();

            // 이상 없으므로, 메인 액티비티를 실행한다.
            Intent intent = new Intent(RegisterActivity.this, MainActivity.class);
            startActivity(intent);
            finish();

        } else {

        }
    }

    @Override
    public void onFailure(Call<UserRes> call, Throwable t) {
        dismissProgress();

        // 유저한테 네트워크 통신 실패했다고 알려준다.
        Snackbar.make(btnRegister, "통신 실패", Snackbar.LENGTH_SHORT).show();
    }
});

응답에 성공했을 때 SharedPreference에 JWT 토큰을 넣고 메인 액티비티로 이동한다.