티스토리 뷰
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 정의하는 방법에 대해서 더 알아봐야 겠다.
'Frontend > Android' 카테고리의 다른 글
Activity의 4가지 Launch Mode에 대하여 (0) | 2019.06.10 |
---|---|
Fragment 간의 데이터 전달 및 findViewById 사용하기 (0) | 2019.06.10 |
ANR의 정의, 발생 요인 및 대응책 (0) | 2019.05.30 |
High Resolution Bitmap를 ImageView에 적용 시 Bitmap Error를 해결하는 방법 (0) | 2019.05.30 |
MQTT에 대한 이해 (0) | 2019.02.08 |
- Total
- Today
- Yesterday
- 안드로이드
- watchos
- C++
- SwiftUI
- 스위프트
- 컬렉션
- ios
- 알고리즘
- Notissu
- Swift
- Elliotable
- 상속
- XCode
- android
- Rxjava
- Auto Layout
- retrofit
- 아이폰
- CloudComputing
- Reactive programming
- 애플워치
- 함수형
- apple
- databinding
- 코틀린
- Apple Watch
- 오토레이아웃
- 함수형프로그래밍
- java
- Kotlin
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |