개발

[안드로이드] Retrofit 연결하기

changha. 2021. 5. 30. 14:51

implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

implementation 'com.squareup.okhttp3:okhttp:3.8.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.11.0'

 

첫번째는 레트로핏 통신을 위해 필수적이고

두번째는 통신 결과를 json형태로 보기위해 선택적으로 추가 한 것입니다..

세, 네번째는 로그에 찍히도록 하기 위해 추가해주었습니다.

 

자신의 baseUrl 위쪽에 먼저 적어 둡니다.

public class RetrofitClient {
    private static RetrofitClient instance = null;
    private static RetrofitAPI retrofitAPI;
    private static final String baseUrl = "http://자신의 Url";

    public RetrofitClient() {
        //로그를 보기 위한 Interceptor
        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();

        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(interceptor)
                .build();

        //retrofit 설정
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .client(client) //로그 기능 추가
                .build();
        retrofitAPI = retrofit.create(RetrofitAPI.class);
//        Log.d("TEST", "실행 완료");
    }
    public static RetrofitClient getInstance() {
        if (instance == null) {
            instance = new RetrofitClient();
        }
        return instance;
    }

    public static RetrofitAPI getRetrofitInterface() {
        return retrofitAPI;
    }


}

addConverterFactory 는 응답을 json 형태로 변환하게 해줍니다. 

 

 

public interface RetrofitAPI {

    @POST("/login")
    Call<LoginResponse> getLoginResponse(@Body LoginRequest loginRequest);
    // getLoginResponse 함수로 LoginRequest.java에 정의해준 데이터들을 서버 Body에 보낸 후 LoginResponse로 데이터를 받겠다는 의미를 가집니다.

    @POST("/join")
    Call<JoinResponse> getJoinResponse(@Body JoinRequest joinRequest);

    @GET("/api/counts")
    Call<CountsResponse> getCounts(@Header("X-AUTH-TOKEN") String token);

    @POST("/api/purchase")
    Call<PurchaseResponse> getPurchaseResponse(@Header ("X-AUTH-TOKEN") String token, @Body PurchaseRequest purchaseRequest);

    @GET("/api/purchase")
    Call<PurchaseDetailsResponse> getPurchaseDetailsResponse(@Header ("X-AUTH-TOKEN") String token);

    @GET("/api/quiz")
    Call<QuizResponse> getQuizResponse(@Header("X-AUTH-TOKEN") String token);

    @GET("/api/quiz/check")
    Call<AnswerResponse> getAnswerResponse(@Header("X-AUTH-TOKEN") String token, @Query("id") String id, @Query("answer") String answer);

    @GET("/api/userpage")
    Call<ArrayList<UserResponse>> getUserResponse(@Header("X-AUTH-TOKEN") String token);
}

백엔드에서 만들어둔 역할에 따른 데이터들을 가져오기 위한 부분입니다. 

위 내용들은 제 프로젝트를 진행하면서 쓴 코드들입니다. 

 

public void response() {
		
		
        //초기화 시키는 단계 
        retrofitClient = retrofitClient.getInstance();
        retrofitAPI = retrofitClient.getRetrofitInterface();

		// retrofitAPI 에서 만든 함수들을 알맞게 가져오면 됩니다.
		retrofitAPI.getPurchaseDetailsResponse(token).enqueue(new Callback<PurchaseDetailsResponse>() {
            @Override
            public void onResponse(Call<PurchaseDetailsResponse> call, Response<PurchaseDetailsResponse> response) {

                if (response.isSuccessful()){
                   
                   
                } else {
                    try {
                        Log.d("error", response.errorBody().string());
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }

            }

            //통신 실패
            @Override
            public void onFailure(Call<PurchaseDetailsResponse> call, Throwable t){
                Log.d("fail", t.getMessage());

            }
        });
    }