안녕하세요 오늘은 아마 다 사용하고 계시겠지만
앱 개발을 하면서 서버와의 통신을 사용하지 않는 분들은 거의 없을 거라고 생각합니다.
우리는 서버와의 통신을 할 때 AsyncTask 를 사용하여 통신을 하곤 했습니다.
하지만 속도가 느리다는 단점 사용하기 불편하다는 단점이 존재하는 AsyncTask를 더 이상 사용할 필요는 없죠.
그렇기에 더욱 중요한 Retrofit 사용방법에 대해 포스팅 해보려고 합니다.
Retrofit
https://square.github.io/retrofit/
라이브러리 공식 홈페이지에 사용방법 또한 자세히 나와 있습니다.!
일단 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();
}
|
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변수);
}
|
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) {
}
});
|
제가 알고 있는 내용을 간단하게 설명하는 블로그입니다.
감사합니다.
'Android > JAVA' 카테고리의 다른 글
Android DataBinding (안드로이드 데이터 바인딩) 사용 방법 (0) | 2020.03.16 |
---|---|
Android RecyclerView (안드로이드 리사이클러뷰) 사용 방법 (0) | 2020.03.16 |
Android Floating Action Button 사용하기 (2) | 2019.01.24 |
Android 여러가지 Button 사용방법 (1) | 2019.01.23 |
Android SharedPreferences 사용 방법 (2) | 2019.01.23 |