바르고 뜨겁게

[안드로이드] 레트로핏2 를 사용해 서버 통신하기 본문

안드로이드

[안드로이드] 레트로핏2 를 사용해 서버 통신하기

RightHot 2019. 4. 12. 14:02

1. 안드로이드 RETROFIT2 사용


  • 레트로핏2 라이브러리 의존성 추가

    build.gradle(app)

        implementation 'com.squareup.retrofit2:retrofit:2.4.0'
       implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
       implementation 'com.squareup.retrofit2:converter-scalars:2.4.0'


  • 레트로핏 공통 처리를 위해 RetrofitCommunication class 생성

    • gubun 파라미터를 통해 서버로 어떤 요청을 할것인지 분개 처리

    • hashMap 을 통해 서버로 전송할 파라미터를 제공 받음

    • Call<JoinCheck> call = service.app_sns_join_check(hashMap.get("SNS_NAME"), hashMap.get("SNS_UNIQ_ID"));

      실제 요청하는 부분. <JoinCheck> Dto 형식으로 요청결과를 리턴 받음

    RetrofitCommunication.java

    public class RetrofitCommunication {
       private final static String SC_TAG = "RetrofitCommunication";

       private static Gson gson;
       private static Retrofit retrofit;
       private static RetrofitService service;

       // ** 레트로핏 요청 (콜백함수, 요청구분, 파라미터) ** //
       public static void request(Callback callback, String gubun, final HashMap<String, String> hashMap) {
           Log.d(SC_TAG, "=========> 요청 : " + gubun);

           if (gson == null) {
               gson = new GsonBuilder()
                      .setLenient()
                      .create();
          }

           if (retrofit == null) {
               retrofit = new Retrofit.Builder()
                      .baseUrl(CommonCode.SERVER_URL) // 서버 호스트
                      .addConverterFactory(GsonConverterFactory.create())
                      .addConverterFactory(GsonConverterFactory.create(gson))
                      .build();
          }
           
           if( service == null){
               service = retrofit.create(RetrofitService.class);
          }
           
           if ("app_sns_join_check".equals(gubun)) {
               Call<JoinCheck> call = service.app_sns_join_check(hashMap.get("SNS_NAME"), hashMap.get("SNS_UNIQ_ID"));
               call.enqueue(callback);
          }
      }
    }


  • RetrofitService class 생성

    http 전송 방식 (get,post) 과 요청 URL, 필드ID 등을 어노테이션으로 명시 합니다.

    RetrofitService.java

    public interface RetrofitService {

       @FormUrlEncoded
       @POST("/appApi/app_sns_join_check")
       Call<JoinCheck> app_sns_join_check(@Field("snsName") String snsName, @Field("snsUniqId") String snsUniqId);

    }


  • 앞단에서 요청하는 부분

    • 앞서 생성한 RetrofitCommunication 을 통해 요청

    • 요청 결과는 cbJoinCheck 에서 받을 수 있다

    LoginActivity.java

        @Override
       protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           binding = DataBindingUtil.setContentView(this, R.layout.activity_login);
           binding.setActivity(this);
           mContext = this;

           HashMap<String, String> resultMap = new HashMap();
           resultMap.put("SNS_NAME", "k");
           resultMap.put("SNS_UNIQ_ID", uid + "");

            // ** 간편 가입 여부 ~ 로그인or가입
            RetrofitCommunication.request(cbJoinCheck, "app_sns_join_check", resultMap);
      }


       // ** 레트로핏 콜백 ** //
       Callback cbJoinCheck = new Callback<JoinCheck>() {
           String cbTAG = "레트로핏 - cbRoomCheck()";

           @Override
           public void onResponse(Call<JoinCheck> call, Response<JoinCheck> response) {
               if (response.isSuccessful()) {
                   JoinCheck joinChecks = response.body();
                   Log.d(TAG, cbTAG + " 콜백 : " + joinChecks.toString());

                   if ("200".equals(joinChecks.getRspCode())) {
                       // 로그인 완료

                  } else {
                       // 로그인 실패
                  }

              } else {
                   CommonAlert.toastMsg(cbTAG + "레트로핏 콜백 요청 실패(1) ", mContext);
                   Log.e(TAG, cbTAG + "레트로핏 콜백 요청 실패(1) ");
              }
          }

           @Override
           public void onFailure(Call<JoinCheck> call, Throwable t) {
               CommonAlert.toastMsg(cbTAG + "레트로핏 콜백 요청 실패(2) " + t, mContext);
               Log.e(TAG, cbTAG + "레트로핏 콜백 요청 실패(2) " + t);
          }
      };



Comments