Retrofit 라이브러리 설치
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")
앱에 인터넷 권한 설정
// network_security_config 작성
<network-security-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="true">*.amazonaws.com</domain>
</domain-config>
</network-security-config>
// manifest 에 추가
<uses-permission android:name="android.permission.INTERNET"/>
// manifest application 에 networksecurityconfig 추가
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config"
Config 작성
public class Config {
public static final String DOMAIN = "서버주소";
public static final String DOMAIN_TEST = "http://localhost:5000";
public static final String PREFERENCE_NAME = "memo_app";
public static final String ACCESS_TOKEN = "access_token";
}
api 패키지를 생성하고 Retrofit client 코드 작성
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 설계서를 바탕으로 내가 보낼 데이터와 받을 데이터를 클래스로 지정한다.
// 내가 보낼 user class
public class User implements Serializable {
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;
}
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;
}
}
// 내가 요청하여 받아올 userres 클래스
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 인터페이스 작성
public interface UserApi {
// 회원가입 API 함수 작성
@POST("/user/register")
Call<UserRes> register(@Body User user);
}
서버로 데이터 보내는 방법
// 1. 레트로핏 변수 생성
Retrofit retrofit = NetworkClient.getRetrofitClient("실행할 Activity");
// 2. Api 인터페이스 생성
UserApi api = retrofit.create(UserApi.class);
// 3. 서버에 보낼 데이터 객체 생성
User user = new User(email, password, nickname);
// 4. api 호출
Call<UserRes> call = api.register(user);
call.enqueue(new Callback<UserRes>() {
@Override
public void onResponse(Call<UserRes> call, Response<UserRes> response) {
// 서버에서 보낸 응답이 200 OK 일때 처리하는 코드
if(response.isSuccessful()){
// 서버가 보낸 데이터를 아까 만든 형식에 맞는 클래스에 저장.
UserRes res = response.body();
}else{
}
}
@Override
public void onFailure(Call<UserRes> call, Throwable t) {
}
});
'개발 > 안드로이드' 카테고리의 다른 글
Android - camera/album 사용해보기 (0) | 2023.02.14 |
---|---|
Android - ProgressDialog (0) | 2023.02.09 |
Android - RecyclerView 페이징처리 (0) | 2023.02.08 |
Android - intent 다른 앱의 액티비티 띄우기! (0) | 2023.02.07 |
Android - Image Url로 화면에 표시 (0) | 2023.02.07 |