Android/JAVA

Android Retrofit2 (안드로이드 레트로핏) 사용방법

728x90

안녕하세요 오늘은 아마 다 사용하고 계시겠지만 

앱 개발을 하면서 서버와의 통신을 사용하지 않는 분들은 거의 없을 거라고 생각합니다. 

 

우리는 서버와의 통신을 할 때 AsyncTask 를 사용하여 통신을 하곤 했습니다. 

하지만 속도가 느리다는 단점 사용하기 불편하다는 단점이 존재하는 AsyncTask를 더 이상 사용할 필요는 없죠.

 

그렇기에 더욱 중요한 Retrofit 사용방법에 대해 포스팅 해보려고 합니다. 

 

Retrofit

https://square.github.io/retrofit/

 

Retrofit

A type-safe HTTP client for Android and Java

square.github.io

라이브러리 공식 홈페이지에 사용방법 또한 자세히 나와 있습니다.!

 

 

일단 Retrofit이란 ? 

안드로이드에서 서버와의 통신을 위한 Square사의 라이브러리입니다.

다른 라이브러리인 Volley나 Asynctask보다 성능적인 면이나 사용하는 방법 또한 더욱 간단하게 사용할 수 있습니다. 

또한 GET, POST 등  여러 가지 통신 방법 또한 지원합니다. 

 

그럼 바로 사용 방법에 대해 설명드리겠습니다. 

 

1. build.gradle(Module: app)

항상 외부 라이브러리를 사용하기 위해성 gradle dependencies에 추가를 해줘야 하죠 

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

 

2. AndroidManifest.xml

당연한 얘기지만 인터넷 권한이 있어야 서버와의 통신이 가능하겠죠. 추가해 줍니다.

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

 

3. TaskServer.java

 

서버통신을 할때 여러 가지 ip를 사용하여 통신할 수도 있기 때문에 클래스를 하나 만들어서 빼도록 하겠습니다. 


1
2
3
 
public class TaskServer {
    public static final String ip = your.ip;
}

 

4. RetrofitClient.java

서버 url을 설정하고 데이터 파싱 및 객체 정보를 반환할 수 있는 Retrofit 객체를 하나 생성하고

ApiService를 활용할 수 있는 클래스도 하나 생성해 줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
public class RetrofitClient {
    //객체생성
    Retrofit retrofit = new Retrofit.Builder()
            //서버 url설정    
            .baseUrl(TaskServer.ip)
            //데이터 파싱 설정
            .addConverterFactory(GsonConverterFactory.create())
            //객체정보 반환
            .build();
 
    public ApiService apiService = retrofit.create(ApiService.class);
}

5. ApiService

통신하기 위한 ApiService 라는 인터페이스를 하나 생성해서 서버 api 끝 주소 ip / 뒤의 주소를 적어주시면 됩니다. 

1
2
3
4
5
6
 
public interface ApiService {
    @GET("통신하기 위한/Api Server 주소")
    Call<JsonArray> getretrofitdata();
}
 

이렇게 기본 작업이 다 완료되었다면 이제 실제 사용할 activity, fragment에서 사용해 보도록 합시다. 

 

6. MainActivity.java

Retrofit객체를 만들었던 RetrofitClient 클래스 객체를 호출 하여 response.isSucessful , onFailure

서버와의 통신 결과를 한눈에 확인하실 수 있습니다. 

서버에서 가져온 결과물은 response.isSuccessful 이쪽에서 받아서 배열에 넣어도 되고, 가공해서 사용하시면 됩니다. 

 

물론 result 데이터를 관리할 수 있는 Dto 클래스를 하나 만들어서 사용하시면 더욱 도움이 될 것 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
RetrofitClient retrofitClient = new RetrofitClient();
        Call<JsonArray> call = retrofitClient.apiService.getretrofitdata();
        call.enqueue(new Callback<JsonArray>() {
            @Override
            public void onResponse(Call<JsonArray> call, Response<JsonArray> response) {
                if (response.isSuccessful()) {
                }
            }
 
            @Override
            public void onFailure(Call<JsonArray> call, Throwable t) {
            }
        });
cs

 

만약 나는 서버에서 바로 가져오는게 아니라 데이터를 보내야 한다.라고 하시는 분들을 위해서 

조금 더 추가하자면 

5번에서 만들었던 ApiService 인터페이스에 이런 식으로 Query문을 추가해서 데이터를 담아 서버에 요청할 수 있습니다. 

 

5-1 ApiService

1
2
3
4
5
6
7
8
9
public interface ApiService {
 
    @GET("통신하기 위한/Api Server 주소")
    Call<JsonArray> getretrofitdata();
 
    @GET("통신하기 위한/Api Server 주소")
    Call<JsonArray> getretrofitquery(@Query("서버에 보낼 Query변수"String string변수);
}
cs

6-1 MainActivity.java           

5-1번에서 추가한 getretrofitquery를 실행하여 서버와 통신하기 위해서는 

 Call<JsonArray> call = retrofitClient.apiService.getretrofitquery(string 변수);

() 이쪽에 string 변수를 담아서 보내주면 서버에 있는 db에 제대로 들어가는 것을 확인하실 수 있을 겁니다. 

예제는 GET 방식만 설명을 드렸는데 나중에 다른 방식도 포스팅하도록 하겠습니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
RetrofitClient retrofitClient = new RetrofitClient();
        Call<JsonArray> call = retrofitClient.apiService.getretrofitquery(string 변수);
        call.enqueue(new Callback<JsonArray>() {
            @Override
            public void onResponse(Call<JsonArray> call, Response<JsonArray> response) {
                if (response.isSuccessful()) {
                }
            }
 
            @Override
            public void onFailure(Call<JsonArray> call, Throwable t) {
            }
        });
 

 

 

제가 알고 있는 내용을 간단하게 설명하는 블로그입니다. 

감사합니다. 

728x90