본문 바로가기
  • 콩's 코딩노트
Android

Android Studio - Retrofit 라이브러리를 사용하기 위한 환경설정

by Cong_S 2022. 7. 21.

Volley 와 같이 안드로이드에서 네트워크를 사용할 때 사용하는 라이브러리 중 

retrofit을 설치할 때 환경설정에 대해 알아보자.

 

1. 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")

}

 

2. res-xml 디렉토리에 network-security-config 파일 생성

<?xml version="1.0" encoding="utf-8" ?>

<network-security-config>
    <domain-config cleartextTrafficPermitted="false">
        <domain includeSubdomains="true">*.googleapis.com</domain>
    </domain-config>
</network-security-config>

 

3. AndroidManifest.xml 수정

 

4. 다음과 같이 디렉토리 구성

5. NetworkClient  클래스 구성

public class NetworkClient {

    public static Retrofit retrofit;

    public static Retrofit getRetrofitClient(Context context){
        if(retrofit == null){
            HttpLoggingInterceptor loggingInterceptor =
                    new HttpLoggingInterceptor();
            loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BASIC);

            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.BASE_URL)
                    .client(httpClient)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }

}

 

6. Config 클래스 구성

package com.사용자명.memo.config;

public class Config {

    public static final String BASE_URL = "도메인";
    public static final String TEST_URL = "테스트 (로컬) 도메인";
    public static final String PREFERENCES_NAME = "앱 이름";

}

 

기본적인 환경설정은 이 정도로 마치고

실제로 불러오는 코드의 예시는 아래 더보기로 작성해두었다.

더보기
Retrofit retrofit =
                        NetworkClient.getRetrofitClient(RegisterActivity.this);

                UserApi api = retrofit.create(UserApi.class);

                User user = new User(email, password, nickname);

                Call<RegisterRes> call = api.register(user);
                call.enqueue(new Callback<RegisterRes>() {
                    @Override
                    public void onResponse(Call<RegisterRes> call, Response<RegisterRes> response) {
                        dismissProgress();

                        // 200 OK 일때,
                        if(response.isSuccessful()){

                            RegisterRes registerRes = response.body();

                            // 억세스토큰은, 이제 앱에서, api 호출할때마다 헤더에 넣어서 보내야한다.
                            // 따라서 억세스토큰은, 쉐어드프리퍼런스에 저장해 놓는다.
                            SharedPreferences sp =
                                    getApplication().getSharedPreferences(Config.PREFERENCES_NAME, MODE_PRIVATE);
                            SharedPreferences.Editor editor = sp.edit();
                            editor.putString("accessToken", registerRes.getAccess_token());
                            editor.apply();

                            finish();

                        } else if (response.code() == 400){

                        } else {
                            Toast.makeText(RegisterActivity.this, "에러발생 : "+response.code(), Toast.LENGTH_SHORT).show();
                        }
                    }

                    @Override
                    public void onFailure(Call<RegisterRes> call, Throwable t) {
                        // 네트워크 자체 문제로 실패!
                        dismissProgress();
                    }

댓글