티스토리 뷰

Frontend/Android

Retrofit2 사용해보기

데니 Denny 2019. 5. 31. 11:18
반응형
SMALL

Retrofit을 사용해본지 상당한 시간이 지났고 기억이 잘 나지 않아 복습하고 학습하자는 의미로 연습해보기로 하였다.

API는 비트코인 저장소 중 하나인 Bithumb Open API를 사용해보기로 하였다.

 

Base URL : https://api.bithumb.com/public/ticker/{currency}

 

1) 먼저 Retrofit과 GSON을 사용하기 위해 Gradle설정을 한다.

dependencies {
	...
    compile 'com.google.code.gson:gson:2.8.2'                 // Gson 사용시
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:converter-gson:2.3.0'     // Gson 처리시
    ...
}

2) Data 클래스 설정

받아오는 데이터에 맞춰서 DATA 클래스를 생성해준다.

public class BithumbTickerData {
    @SerializedName("opening_price")
    public String openingPrice;
    @SerializedName("closing_price")
    public String closingPrice;
    @SerializedName("min_price")
    public String minPrice;
    @SerializedName("max_price")
    public String maxPrice;
    @SerializedName("average_price")
    public String averagePrice;
    @SerializedName("units_traded")
    public String unitsTraded;
    @SerializedName("volume_1day")
    public String volume1day;
    @SerializedName("volume_7day")
    public String volume7day;
    @SerializedName("buy_price")
    public String buyPrice;
    @SerializedName("sell_price")
    public String sellPrice;
    @SerializedName("date")
    public long date;
}

여기서 SerializedName이라는 Anotation은 받아오는 데이터의 파라미터와 클래스에서 사용하는 필드 변수의 이름이 다를 경우 사용할 수 있다. (대표적으로 한글 이름으로 받아오지만 클래스에서는 영문 이름을 사용하고자 하는 경우에는 SerializedName을 사용한다.)

public class BithumbTicker {
    @SerializedName("status")
    public String status;
    @SerializedName("data")
    public BithumbTickerData data;
}

JSON구조가 data안에 price, date, traded등등 데이터가 들어가기 때문에 Class를 2개 만들어서 클래스변수로써 추가해준다.

 

3) Interface 정의

API Method방식과 Path에 대해서 정의한다.

 public interface OpenApiService {
        @GET("public/ticker/{path}")
        Call tickerInfo(@Path("path") String path);
 }

 

4) Retrofit 초기화

Retrofit 생성 후 사용할 interface를 통해 서비스를 만든다.

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://api.bithumb.com/")
        .addConverterFactory(GsonConverterFactory.create())        // Gson 처리시
        .build();
OpenApiService openApiService = retrofit.create(OpenApiService.class);

 

5) Call을 생성하고 Callback함수를 정의한다.

        Call tickerInfo = openApiService.tickerInfo("BTC");
        
        tickerInfo.enqueue(new Callback() {
            @Override
            public void onResponse(Call call, Response response) {
                Toast.makeText(TestMainActivity.this, response.body().toString(), Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFailure(Call call, Throwable t) {
                Toast.makeText(TestMainActivity.this, t.toString(), Toast.LENGTH_SHORT).show();
            }
        });

 

요청이 이루어지면 응답이 오고 응답이 오면 tickerInfo를 enqueue해서 onResponse/onFailure 메소드가 실행이 되어 데이터를 받아볼 수 있게 된다.

 

GET/POST/PUT/DELETE등 다양한 경우에 있어서 Interface 정의하는 방법에 대해서 더 알아봐야 겠다.

 

반응형
LIST
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함