지난 글은 라이브러리 사용하지 않고, REST API를 사용하는 것을 해보았다면,
이제는 Retrofit이라는 라이브러리를 통해서 REST API를 사용하는 것을 해보겠다.
목표 : Retrofit으로 REST API를 사용해보자.
작업 순서
1. 받을 response를 바탕으로 Contributor을 먼저 만들고
2. Retrofit을 통해서 통신할 interface 모듈을 만들고
3. Retrofit 인스턴스를 생성해서 사용한다.
별도 HTTP를 통신을 할 필요 없고, 파싱도 알아서 해준다. 거기다 속도도 더 빠르다. 짱임...
Retrofit_API.zip
public class Contributor { private String login;
public String getLogin() { return login; }
public void setLogin(String login) { this.login = login; } }
|
public interface GitHub { // GET /POST/ DELETE/ PUT 메소드들을 인터페이스에 구현하여 사용할 수 있다 @GET("/repos/{owner}/{repo}/contributors") // JSON ARRAY를 리턴하므로 List<>가 되어야한다 Call<List<Contributor>> contributors( @Path("owner") String owner, @Path("repo") String repo);
}
|
public class MainActivity extends AppCompatActivity {
private Retrofit retrofit; private TextView tv;
private final String BASE_URL = "https://api.github.com";
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
initRetrofit(); tv = (TextView)findViewById(R.id.tv_response);
// 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 cont : contributors){ tv.append(cont.getLogin() + "\n"); } }
//실패시 @Override public void onFailure(Call<List<Contributor>> call, Throwable t) { Toast.makeText(MainActivity.this,"정보받기 실패", Toast.LENGTH_LONG).show();
} }); }
private void initRetrofit() { retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build(); } }
|
참고 :
http://jizard.tistory.com/104
http://flymogi.tistory.com/entry/Retrofit%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B4%EC%9E%90-v202
http://bcho.tistory.com/953?category=252770
http://gun0912.tistory.com/30