Retrofit은 Android 및 Java에서 REST API 호출을 쉽게 할 수 있도록 도와주는 HTTP 클라이언트 라이브러리
라이브러리를 사용하기위해 임포트
공식 홈페이지에 있는 버전 확인, build.gradle파일의 dependencies에 아래 코드 입력
implementation("com.squareup.retrofit2:retrofit:2.11.0")
implementation("com.squareup.retrofit2:converter-gson:2.11.0")
implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")
Body에 Json으로 데이터를 보낼 클래스
public class User {
private String email;
private String password;
private String nickname;
public User(){
}
public User(String email, String password){
this.email = email;
this.password = password;
}
public User(String email, String password, String nickname) {
this.email = email;
this.password = password;
this.nickname = nickname;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
}
응답받는 클래스
public class UserRes {
private String result;
private String accessToken;
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public String getAccessToken() {
return accessToken;
}
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
}
api 패키지에 NetworkClient.java 파일 생성하고 작성해준다.
( NetworkClient.java 파일을 생성하는 이유는 Retrofit 인스턴스를 중앙에서 관리하여 코드의 재사용성을 높이고
설정의 일관성을 유지하며, 의존성 주입 및 테스트 용이성을 향상시키기 위함 )
public class NetworkClient {
public static Retrofit retrofit;
public static Retrofit getRetrofitClient(Context context){
if(retrofit == null){
// 통신 로그 확인할때 필요한 코드
HttpLoggingInterceptor loggingInterceptor =
new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
// 네트워크 연결관련 코드
OkHttpClient httpClient = new OkHttpClient.Builder()
.connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(1, TimeUnit.MINUTES)
.writeTimeout(1, TimeUnit.MINUTES)
.addInterceptor(loggingInterceptor)
.build();
// 네트워크로 데이터를 보내고 받는
// 레트로핏 라이브러리 관련 코드
retrofit = new Retrofit.Builder()
// Url을 입력하는 부분은 컨픽파일에서 상수처리
.baseUrl(Config.DOMAIN)
.client(httpClient)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
api 패키지에 인터페이스를 만들고 api 호출
POST 요청을 사용하여 user/register 경로로 API를 호출
파라미터 User user는 요청 본문에 포함될 데이터
@Body 어노테이션을 사용하여 User 객체를 JSON 형식으로 변환해 요청 본문에 포함시킨다.
함수의 리턴 타입 Call<UserRes>는 API 호출의 응답을 나타냅니다. 이 경우, 응답 데이터가 UserRes 객체로 변환
public interface UserApi {
// 회원가입 API
// 함수명을 작성해주고 보낼 데이터는 파라미터에 작성, 받을 데이터는 리턴타입에 작성
@POST("user/register")
Call<UserRes> register(@Body User user);
호출하여 사용하면 끝!
// 회원가입 API 를 호출한다.
// 0. 다이얼로그를 보여준다.
showProgress();
// 1. 레트로핏 변수 생성 : api 패키지에 NetworkClient.java 파일이 있어야 한다.
Retrofit retrofit = NetworkClient.getRetrofitClient(RegisterActivity.this);
// 2. api 패키지에 인터페이스를 클래스 객체로 생성 : api 패키지에 인터페이스가 있어야 한다.
UserApi api = retrofit.create(UserApi.class);
// 3. 보낼 데이터를 준비
User user = new User(email, password, nickname);
// 4. api 를 만든다.
Call<UserRes> call= api.register(user);
// 5. 회원가입 api 를 호출한다.
call.enqueue(new Callback<UserRes>() {
@Override
public void onResponse(Call<UserRes> call, Response<UserRes> response) {
Log.i("MEMO REGISTER", ""+response.code());
// 다이얼로그를 먼저 없앤다.
dismissProgess();
// 200 OK 일 때
if(response.isSuccessful()){
UserRes userRes = response.body();
Log.i("MEMO REGISTER", userRes.getAccessToken());
// 서버로부터 받은 토큰을 저장해야 한다.
SharedPreferences sp = getSharedPreferences(Config.SP_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString("token", userRes.getAccessToken());
editor.commit();
// 회원가입 액티비티는 종료를 해야 메인액티비티를 띄운다.
Intent intent = new Intent(RegisterActivity.this, MainActivity.class);
startActivity(intent);
finish();
return;
}else if (response.code() == 500){
Snackbar.make(btnRegister,
"이미 회원가입 한 이메일입니다. 로그인하세요!",
Snackbar.LENGTH_SHORT).show();
return;
}else{
Snackbar.make(btnRegister,
"서버에 문제가 있습니다. 잠시 후 다시 시도해주세요!",
Snackbar.LENGTH_SHORT).show();
return;
}
}
@Override
public void onFailure(Call<UserRes> call, Throwable throwable) {
// 다이얼로그를 먼저 없앤다.
dismissProgess();
}
});
'Android Studio' 카테고리의 다른 글
[Android Studio] AlertDialog array로 사용 (0) | 2024.06.18 |
---|---|
[Android Studio] 카메라, 앨범 사용 (0) | 2024.06.17 |
[Android Studio] 이미지 로딩 라이브러리 Glide (1) | 2024.06.12 |
[Android Studio] Json 데이터 파싱 (0) | 2024.06.11 |
[Android Studio] 안드로이드 네트워크 통신 Volley 라이브러리 (1) | 2024.06.11 |