반응형

Retrofit2 사용(Http Rest Api 라이브러리)

 

Retrofit

A type-safe HTTP client for Android and Java

square.github.io

 

AndroidManifest.xml - 퍼미션 추가

<uses-permission android:name="android.permission.INTERNET" />

 

app build.gradle

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

 

데이터 클래스 생성

//로그인 데이터
public class DataLogin {
    public String email, password, nick_name, create_dt;
}

//Retrofit 응답 클래스 : 서버에서 주는 형식과 동일하게 구성
public class VoLogin {
    public String result, message;
    public DataLogin dataLogin;
}

 

retrofit2 인터페이스 생성

import retrofit2.Call;
import retrofit2.http.Headers;
import retrofit2.http.POST;
import retrofit2.http.Query;

public interface RetrofitTestService {

    //--- 로그인 ------
    //Http Header 설정(User-Agent 변경)
    @Headers({ "Accept: application/vnd.github.v3.full+json", "User-Agent: Android_Mobile" })
    //GET호출(url지정)
    @GET("LoginServlet?action=login")
    Call<VoLogin> login(@Query("id") String id, @Query("pass") String pass);

    //--- 저장 ------
    //POST호출(url지정)
    @POST("SaveDataServlet?action=insert")
    Call<VoSaveData> saveData(@Query("data1") String data1, @Query("data2") String data2);
}

 

호출

//--- 선언 ------
Retrofit retrofit;
RetrofitTestService retrofitTestService;


//--- 초기화(주로 onCreate) ------
retrofit = new Retrofit.Builder()
        .baseUrl("http://www.testServer.co.kr/")
        .addConverterFactory(GsonConverterFactory.create())
        .build();
retrofitTestService = retrofit.create(RetrofitTestService.class);


//--- 호출 ------
String id = edit_id.getText().toString();
String pass = edit_pass.getText().toString();

if(id.length() <= 0) {
    Toast.makeText(this, "아이디를 입력해 주세요.", Toast.LENGTH_SHORT).show();
    return;
}
if(pass.length() <= 0) {
    Toast.makeText(this, "비밀번호를 입력해 주세요.", Toast.LENGTH_SHORT).show();
    return;
}

loading.setVisibility(View.VISIBLE);//로딩 On

//최종호출url : baseUrl+인터페이스지정
// ===> http://www.testServer.co.kr/LoginServlet?action=login
retrofitTestService.login(id, pass).enqueue(new Callback<VoLogin>() {
    @Override
    public void onResponse(Call<VoLogin> call, Response<VoLogin> response) {
        loading.setVisibility(View.GONE);//로딩 Off

        //서버에서 result에 성공이면 "success"를 넣어준다.
        if("success".equals(response.body().result)) {
            //서버에서 응답한 login데이터 공통에 저장
            Common.dataLogin = response.body().data;

            //메인이동
            Intent intent = new Intent(LoginActivity.this, MainActivity.class);
            startActivity(intent);
            finish();
        } else {
            Util.alert(LoginActivity.this, response.body().message);
        }
    }

    @Override
    public void onFailure(Call<VoLogin> call, Throwable t) {
        loading.setVisibility(View.GONE);//로딩 Off
        Util.alert(LoginActivity.this, "네트워크가 불안정합니다.");
    }
});
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기