OkHttpClient okHttpClient = new OkHttpClient.Builder()
                //  SSL 인증 과정 진행
                .hostnameVerifier (hostnameVerifier)
                //  헤더에 AUTHORIZATION 정보를 추가
                .addInterceptor (new Interceptor ()
                {
                    @Override
                    public okhttp3.Response intercept (Chain chain) throws IOException
                    {
                        Request request = chain.request ().newBuilder ().addHeader ("AUTHORIZATION", headerToken).build ();
                        return chain.proceed (request);
                    }
                })

 

 

//  통신 시 json 사용과 해당 객체로의 파싱을 위해 생성,
//  이 부분이 없을 시 IllegalArgumentException 발생 함
Gson gson = new GsonBuilder ().setLenient ().create ();

 

 

 // 사용할 Retrofit과, API를 작성해둔 인터페이스를 선언 함
Retrofit retrofit;
ApiService apiService;

retrofit = new Retrofit.Builder ()
                //  서버 주소를 추가
                .baseUrl (GlobalApplication.getGlobalApplicationContext ().getString (R.string.server_address_root))
                //  Json 사용을 위해 ConvertFactory 추가
                .addConverterFactory (GsonConverterFactory.create (gson))
                //  https 통신을 위한 SSL 인증과정과, 헤더에 인증정보를 추가한 httpClient설정
                .client (okHttpClient)
                .build ();

//  API를 사용하기 위한 서비스 생성
apiService= retrofit.create (ApiService .class);

 

 

/**
 *  ApiService 인터페이스
 *  Rest API 의 메서드들을 선언 해두는 곳 
 */
public interface ApiService
{
    /**
     *  POST 형식을 사용하며, base URL 이후 상세 URL을 작성
     *  Body 에는 UserData 를 json 형식으로 추가함
     *
     *  결과는 서버에서 클라이언트로 부터 전달받은 UserData를 가공하여
     *  다시 클라이언트로 UserData로 전달해 줌
     */
    @POST ("/SpringServer/user")
    Call<UserData> hello(@Body UserData userData);
}

 

 

 

Call<UserData> userDataCall = apiService.hello (user);

        //  비동기식 호출 사용
        userDataCall.enqueue (new Callback<UserData> ()
        {
            @Override
            public void onResponse (Call<UserData> call, Response<UserData> response)
            {
                if(response.isSuccessful ())
                {
                    //  Response 가 성공한 상태
                    userData = response.body ();
                }
                else
                {
                    //  Response 가 실패한 상태
                    //  서버와의 통신에 성공하였지만, 서버 내부 동작 중에서 잘못된 점이 확인되어,
                    //  통신에는 성공한 상태로 설정하고, Body 에 실패한 정보를 추가
                    //  ex) 서버에서 잘못된 params 를 체크하여 잘못된 정보가 있다고 return
                    try
                    {
                        String result = response.errorBody ().string ();
                        Gson gson = new Gson ();

                         /**
                         ErrorCode.Class                       
                         public class ErrorCode
                         {
                            public String code;
                            public String message;
                         }
                         */
                        ErrorCode errorCode = gson.fromJson (result, ErrorCode.class);
                    }
                    catch(Exception e)
                    {
                        e.printStackTrace ();
                    }
                }
            }

            @Override
            public void onFailure (Call<UserData> call, Throwable t)
            {
                //  Request 가 실패한 상태 ( 통신 자체, 서버의 구현 이외의 에러 발생 )
                //  ex) 통신이 불가, 서버와의 연결 실패 등               
            }
        });

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'[Android] - 개념 > Retrofit2' 카테고리의 다른 글

Retrofit2. 3. 참고 URL  (0) 2017.03.13
Retrofit2. 2.사용방법 (Retrofit 2로 HTTP 호출하기)  (0) 2017.03.12
Retrofit2. 1.기본 개념  (0) 2017.03.12
Posted by 농부지기
,