📝안드로이드 네트워크 통신 레트로핏 라이브러리 사용하기
우선 라이브러리를 사용하기위해 임포트 해준다
build.gradle파일의 dependencies에 아래 코드 입력 (공식 홈페이지에 있는 버전 확인해서 사용하기)
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation("com.squareup.okhttp3:logging-interceptor:4.9.0")
레트로핏 라이브러리를 통해서 Body에 Json으로 데이터를 보낼 클래스와 응답받는 클래스를 만들어준다
먼저 클래스를 implements Serializable 해주고
API 명세서를 보고 멤버변수를 만든다(private으로 만들기)
만든 멤버변수의 Getter / Setter도 만들어준다
레트로핏 라이브러리를 통해서 Body에 Json으로 데이터를 보낼 클래스
public class User implements Serializable {
private String email;
private String password;
private String 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 implements Serializable {
private String result;
private String access_token;
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public String getAccess_token() {
return access_token;
}
public void setAccess_token(String access_token) {
this.access_token = access_token;
}
}
클래스를 만들었다면 api라는 패키지를 하나 생성하고 그 안에 NetworkClient 클래스를 만들어 아래코드처럼 입력해준다
※ Level.BODY 부분은 로그로 확인하고싶은 데이터로 입력해준다(없을시 NONE)
baseUrl()에 Url을 입력하는 부분은 컨픽파일에서 상수처리해서 사용
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().baseUrl(Config.DOMAIN).client(httpClient)
.addConverterFactory(GsonConverterFactory.create()).build();
}
return retrofit;
}
}
이제 사용할 API인터페이스를 만들어주는데 이름은 처리할 API관련으로 만들어준다
// 유저 관련 API 들을 모아놓은 인터페이스
public interface UserApi {
// 회원가입 API 함수 작성
@POST("/user/register")
Call<UserRes> register(@Body User user);
// 로그인 API
@POST("/user/login")
Call<UserRes> login(@Body User user);
}
다 만들었다면 아래 코드처럼 사용해준다
// 회원가입 API를 호출
// 1. 다이얼로그를 화면에 보여준다
showProgress("회원가입 진행중...");
// 2. 서버로 데이터를 보낸다
// 2-1. 레트로핏 변수 생성
Retrofit retrofit = NetworkClient.getRetrofitClient(RegisterActivity.this);
// 2-2. api 패키지에 있는 인터페이스 생성
UserApi api = retrofit.create(UserApi.class);
// 2-3. api 보낼 데이터 만들기 > 클래스의 객체 생성
User user = new User(email, password, nickname);
// 2-4. API 호출
Call<UserRes> call = api.register(user);
// 2.5 서버로부터 받아온 응답을 처리한다
call.enqueue(new Callback<UserRes>() {
@Override
public void onResponse(Call<UserRes> call, Response<UserRes> response) {
// 프로그래스 다이얼로그가 있으면 나타나지않게 해준다
dismissProgress();
// 서버에서 보낸 응답이 200 OK일때 처리하는 코드
if (response.isSuccessful()){
Log.i("MEMO_APP", response.toString());
// 서버가 보낸 데이터를 받는 방법
UserRes res = response.body();
// 억세스토큰은 api 호출할때마다 헤더에서 사용하므로
// 회원가입이나 로그인이 끝나면 파일로 꼭 저장해놔야한다
SharedPreferences sp = getApplication().getSharedPreferences(Config.PREFERENCE_NAME,MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString(Config.ACCESS_TOKEN, res.getAccess_token());
editor.apply();
// 3. 데이터를 이상없이 처리하면 메인 액티비티를 화면에 나오게 한다
Intent intent = new Intent(RegisterActivity.this, MainActivity.class);
startActivity(intent);
finish();
} else {
Log.i("MEMO_APP", response.toString());
}
}
@Override
public void onFailure(Call<UserRes> call, Throwable t) {
// 프로그래스 다이얼로그가 있으면 나타나지않게 해준다
dismissProgress();
}
});
'Android Studio' 카테고리의 다른 글
[Android Studio] Retrofit 라이브러리를 이용해 RecyclerView 화면 처리하기 (0) | 2023.02.09 |
---|---|
[Android Studio] Retrofit 라이브러리를 이용해 POST로 API 호출하기 (0) | 2023.02.09 |
[Android Studio] 네트워크를 통해서 로직처리를 할때 보여주는 프로그레스 다이얼로그 만들기 (0) | 2023.02.09 |
[Android Studio] ArrayList 객체 Intent로 전달하기 (0) | 2023.02.08 |
[Android Studio] RecyclerView 페이징 처리하기 (0) | 2023.02.08 |
댓글