Android폰에서 한국투자증권 OpenAPI 쉽게 사용하기 - Retrofit2 포스트를 통해 Android폰에서 REST API를 어떻게 호출하고 데이터를 어떻게 처리하는지 이해하셨을 것입니다.
이제 레벨을 조금 높여 보겠습니다.
이번 포스트에서는 지난 포스트에 이어서 RecyclerView에서 하나의 종목을 클릭하면 그 종목의 일자별 주가
주식현재가 일자별[v1_국내주식-010]
를 받아오는 예제입니다.
지난 Post에서 살짝 맛봤던 Toolbar에 향후 추가시킬 차트,관심종목, 계좌 등의 서비스를 위한 메뉴 및 아이콘을 추가하고, UI를 Material Design으로 깔끔하게 바꿔봅니다.
1. 이번 예제의 최종결과물
이번 예제의 실행화면 Shots를 참고하세요
Main Activity | DayPrice Activity |
![]() |
![]() |
오늘은 졸려서 나머지는 내일 올립니다.
2. KIS OpenAPI
이번 예제에서 다룰 KIS OpenAPI는 API문서 국내주식[기본시세] 편의 주식현재가 일자별[v1_국내주식-010] 이며 요약하면 아래와 같습니다.
구분 | 항목 | 설명 (예시) |
Header | appkey | KIS OpenAPI에서 발급받은 본인 AppKey |
appSecret | KIS OpenAPI에서 발급받은 본인 AppSecret Key | |
Access Token | API 접근 허가 Token (POST 요청으로 발급받으며 24시간 유효) | |
tr_id | 주식현재가 일자별 요청을 지정하는 ID = FHKST01010400 | |
Query | Parameter | "fid_cond_mrkt_div_code": "J", "fid_input_iscd": "000660", "fid_org_adj_prc": "0000000001", "fid_period_div_code": "D" |
Domain | https://openapi.koreainvestment.com:9443 | |
URL | /uapi/domestic-stock/v1/quotations/inquire-daily-price |
한가지 특이한 점은 Query Parameter에 보시면 fid_input_iscd(종목코드)가 있는 것을 확인하실 수 있습니다. 주식현재가 일자별 요청은 종목코드를 던져줘야 받을 수 있다는 것을 알 수 있습니다. 자세한 내용은 KIS 문서를 참조하면 됩니다.
3. 이번 예제에서 해야 하는 작업 요약
이번 예제의 목표를 달성하기 위해서는 크게 아래 두가지 작업을 마치면 원하는 결과를 얻어낼 수 있습니다. 이를 위해 지난 예제의 MegaBomb App을 수정할 것입니다.
1) 주식현재가 일자별 REST API 호출 관련
- Stock Class 종목코드 추가
- RecyclerView ItemClickListener 추가
- 주식현재가 일자별 Activity, Layout 및 관련 Class 생성 (Manifest 등록)
- ApiInterface에 주식현재가 일자별 Request 추가
2) Toolbar Menu
- 메뉴 아이콘 생성
- Menu 생성 및 menu item 작성
- toolbar -> material toolbar로 변경
1. 주식현재가 일자별 REST API 호출 관련
1) RecyclerView ItemClickListener 추가
먼저 activity_main에서 새로운 Intent로 넘겨줄 Stock Class에서 종목코드를 추가해 줍니다. 넘어오는 json 이름을 그대로 사용합니다.
@SerializedName("stck_shrn_iscd")
private String stck_shrn_iscd;
생성자 및 Getter도 만들어 줍니다. 이전 포스테에서 설명드린 바와 같이 Generate를 이용하면 쉽겠죠
자, 이제 RecyclerView에 ItemClickListener를 추가합니다. ItemClickListener 추가를 위해서 StockAdapter에서 변경할 부분은 아래 3개입니다. 그런 다음 MainActivity를 수정합니다.
2. RecyclerView에 ItemClickListener 추가
1) ItemClickListener 선언
private List<Stock> stockList; 문 아래 변수를 선언해 줍시다.
private ItemClickListener mItemListener;
2) ItemClickListener Interface 생성
인터페이스는 StockAdapter Class 안에 어디에 생성해도 무방하지만, getItemCount() Method 아래 배치합니다. Item을 클릭하면 Stock을 넘겨주도록 합니다.
public interface ItemClickListener{
void onItemClick(Stock stock);
}
3) StockAdapter 생성자에 ItemClickListener 추가
public StockAdapter(List<Stock> stockList, ItemClickListener itemClickListener) {
this.stockList = stockList;
this.mItemListener = itemClickListener;
}
이제 StockAdapter ItemClickLister 추가 작업은 끝났습니다. 다음은 MainActivity adapter에 onItemClick Event를 추가할 것입니다. 그런데 Item을 클릭하면 종목코드를 내보내줄 수 있도록 합니다. (새로운 Activity에서 종목코드를 받아서 주식현재가 일자별[v1_국내주식-010] 을 REST API를 호출할 수 있도록)
4) MainActivity adapter onItemClick Event 추가
adapter = new StockAdapter(stockList);
기존 위 코드를 아래와 같이 바꿔줍니다. 코드를 보시면 DayPriceActivity에 intent.putExra를 통해서 종목코드를 넘겨줌과 동시에 Intent를 실행하는 부분을 확인할 수 있습니다. (아직 DayPriceActivity를 구현하지 않은 상태입니다.) 종목코드가 정상적으로 넘어오는지 보기 위해서 Toast문을 통해 확인합니다.
adapter = new StockAdapter(stockList, new StockAdapter.ItemClickListener() {
@Override
public void onItemClick(Stock stock) {
Toast.makeText(MainActivity.this, stock.getStck_shrn_iscd(), Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getApplicationContext(), DayPriceActivity.class);
intent.putExtra("stockCode", stock.getStck_shrn_iscd());
startActivity(intent);
}
});
이제 ItemClickListener 추가 작업은 완료되었습니다.
3. 주식현재가 일자별 Activity, Layout 및 관련 Class 생성 (Manifest 등록)
새로운 DayPriceActivity를 생성하기 위해서 app 마우스 우클릭 -> New -> Activity -> Empty Views Actity 를 클릭합니다.
Dialog 박스에 Name을 Activity Name 을 DayPriceActivity로 입력하고 Layout Name은 activity_dayprice로 입력하고 Finish 버튼을 누릅니다. DayPriceActivity와 activity_dayprice가 자동으로 생성된 것을 확인할 수 있습니다.
다음은 Manifest에 DayPriceActivity를 등록하는데 MainActivity를 Parent로 등록합니다.
<activity
android:name=".DayPriceActivity"
android:exported="false"
android:parentActivityName=".MainActivity">
</activity>