이번 강의에서는 안드로이드를 위한 HTTP 클라이언트 레트로핏을 이용해서 API 통신을 구현 해 보도록 하겠다.
먼저, JSON 값을 돌려주는 서버가 준비 되어 있어야한다.
여기서는 간단히...깃헙 contributors를 통해 살펴보겠다.
주소는 https://api.github.com/repos/square/retrofit/contributors 이다.
목표
https://api.github.com/repos/square/retrofit/contributors 에 들어가면 아래와 같이 JSON 형식으로 된 정보들이 나온다.
오늘 해볼 것은 저 정보들 중에서 특히 'login' 정보를 TextView에 받아 오는 것이다.
build.graddle (app)
1 2 3 4 5 | dependencies { ... compile 'com.squareup.retrofit2:retrofit:2.2.0' ... } | cs |
retrofit을 앱에 적용시키기 위해서 디펜던시 설정을 해준다.
위의 3번째 라인에 있는 한 줄을 추가시켜 주면된다.
그리고 컨버터로는 GSON을 사용할 것이기 때문에 아래의 한줄을 더 추가시켜준다.
(GSON이외에도 많은 컨버터들을 사용할 수 있다. >> 공식문서 참고)
compile 'com.squareup.retrofit2:converter-gson:2.2.0'
activity_retrofit.xml
1 2 3 4 5 6 7 8 9 10 11 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="TextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView" /> </LinearLayout> | cs |
res > layout에 activity_retrofit.xml 파일을 추가시켜 준다.
이 텍스트뷰에 카테고리 정보를 띄울 것이다.
RetrofitActivity.java
1 2 3 4 5 6 7 | public class RetrofitActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_retrofit); } } | cs |
위와 같이 RetrofitActivity.java도 구현해준다.
이제 본격적으로 Retrofit을 이용 해 보도록 하겠다.
Contributor.class
1 2 3 4 5 6 7 8 | public class Contributor { // login 정보를 받아올 것이므로 public final String login; public Contributor(String login) { this.login = login; } } | cs |
login 필드에 해당하는 정보를 받아올 객체인 Contributor를 만든다.
GitHub.interface
1 2 3 4 5 6 7 8 9 | public interface GitHub { // GET/POST/DELETE/PUT 메소드들을 인터페이스에 구현하여 사용할 수 있다. @GET("/repos/{owner}/{repo}/contributors") // JSON Array를 리턴하므로 List<>가 되었다 Call<List<Contributor>> contributors( // param 값으로 들어가는 것들이다 @Path("owner") String owner, @Path("repo") String repo); } | cs |
GItHub이라는 인터페이스에는 메소드들을 정의할 수 있다.
RESTful한 모든 것들이 다 들어갈 수 있으며 쿼리도 넣을 수 있다. 아래는 그 하나의 예시다.
@GET("/users/list?sort=desc")
RetrofitActivity.class
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | public class RetrofitActivity extends Activity { private Retrofit retrofit; private TextView textView; private final String BASE_URL = "https://api.github.com"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_retrofit); init(); // GitHub API 인터페이스 생성 GitHub gitHub = retrofit.create(GitHub.class); // 인터페이스에 구현한 메소드인 contributors에 param 값을 넘기는 요청 만ㄷ름 Call<List<Contributor>> call = gitHub.contributors("square", "retrofit"); // 앞서만든 요청을 수행 call.enqueue(new Callback<List<Contributor>>() { @Override // 성공시 public void onResponse(Call<List<Contributor>> call, Response<List<Contributor>> response) { List<Contributor> contributors = response.body(); // 받아온 리스트를 순회하면서 for (Contributor contributor : contributors) { // 텍스트 뷰에 login 정보를 붙임 textView.append(contributor.login); } } @Override // 실패시 public void onFailure(Call<List<Contributor>> call, Throwable t) { Toast.makeText(RetrofitActivity.this, "정보받아오기 실패", Toast.LENGTH_LONG) .show(); } }); } public void init() { textView = (TextView) findViewById(R.id.textView); // GSON 컨버터를 사용하는 REST 어댑터 생성 retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build(); } } | cs |
다시 액티비티로 돌아와서, 위와 같이 입력해준다.
이제 앱을 실행하면 빠르게 결과가 뜨는 것을 알 수 있다. ^-^
'프로그래밍 > Android' 카테고리의 다른 글
[2018년] 안드로이드 인앱 결제 구현 완벽 정리 (40) | 2018.01.25 |
---|---|
안드로이드 ListView 스크롤 끝날때 물결 없애는 방법 (0) | 2017.10.21 |
[Retrofit] 안드로이드로 HTTP 통신하는 Retrofit 소개 (0) | 2017.03.28 |
안드로이드 구글 애널리틱스 (Google Analytics) 연동하기 (4) | 2017.03.03 |
Android DB 서버에서 다운받기, 연동 (0) | 2017.01.26 |