바르고 뜨겁게
[안드로이드] 레트로핏2 를 사용해 서버 통신하기 본문
레트로핏이란?
http 서버통신을 쉽게 사용할 수 있게 해주는 안드로이드 라이브러리.
https://academy.realm.io/kr/posts/droidcon-jake-wharton-simple-http-retrofit-2/
레트로핏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 {
"/appApi/app_sns_join_check") (
Call<JoinCheck> app_sns_join_check( ("snsName") String snsName, ("snsUniqId") String snsUniqId);
}
앞단에서 요청하는 부분
앞서 생성한 RetrofitCommunication 을 통해 요청
요청 결과는 cbJoinCheck 에서 받을 수 있다
LoginActivity.java
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()";
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) ");
}
}
public void onFailure(Call<JoinCheck> call, Throwable t) {
CommonAlert.toastMsg(cbTAG + "레트로핏 콜백 요청 실패(2) " + t, mContext);
Log.e(TAG, cbTAG + "레트로핏 콜백 요청 실패(2) " + t);
}
};
'안드로이드' 카테고리의 다른 글
안드로이드 스튜디오 구버전(이전버전,다른버전) 다운 받기 (0) | 2019.04.23 |
---|---|
[안드로이드] 본고딕 (NotoSans) 사용시 여백 (padding) 문제 (0) | 2019.04.16 |
[안드로이드] 글라이드(Glide) 아웃오브메모리 방지, 메모리 최적화 (0) | 2019.04.05 |
[안드로이드] AsyncTask 분리하기 , 서버통신 분리하기 (0) | 2019.03.28 |
안드로이드 스튜디오 자체 오류/에러 해결방법 (0) | 2019.03.27 |
Comments