Zaif 공식 Android 앱이 미묘하기 때문에 Kotlin 공부를 겸하여 통화 쌍 Viewer 앱을 만들었습니다.
소개
어쩐지 컨디션을 무너뜨려 버려, 2018년 1월은 일을 쉬고 있었습니다.
가 슬슬 재활 겸 Kotlin의 공부를 하려고 생각해, Zaif의 가상 통화 페어 Viewer 어플리를 만들었습니다(제재를 Zaif로 한 것은 공식 어플이 엉망인데 k···게훈 게훈). 이런 녀석↓
왼쪽 목록 페이지는 10 초마다 (ZaifAPI는 요청 수에 제한이 있고, 일괄로 종가를 취득 할 수 없기 때문에 이런 사양에 orz)에 종가를 가져오고 있으며, 개별 페이지는 WebSocket에서 실시간 로 업데이트 중입니다. 이번은 Kotlin으로 만든 데다 Java와의 차이점, 망설일 것 같은 포인트를 정리해 보았습니다.
급한 분은 GitHub에 코드를 공개하고 있으므로 아래에서 부탁드립니다.
htps : // 기주 b. 코 m / 타루 m 즈 / 자이 fC
망설임 포인트 ① Java 시대에 신세를 졌던 ButterKnife가 필요 없다!
많은 분들이 신세를 졌을 것이다 ButterKnife입니다만, 필요 없습니다! !
라고 하는 것은 너무 말입니다만, 바인드 해 주지 않아도 Kotlin Android Extensions라고 하는 Kotlin 표준의 기능으로 직접 Layout의 요소를 취득할 수 있습니다. 이런 느낌.
activity_main.xml/ 省略 /
<android.support.v4.widget.SwipeRefreshLayout
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:id="@+id/swiperefresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
/ 省略 /
MainActivity.kt
import kotlinx.android.synthetic.main.activity_main.*
/ 省略 /
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// xmlで定義したIDで取ってこれる!
swiperefresh.setOnRefreshListener({
Timber.d("onRefresh called from SwipeRefreshLayout");
initiateRefresh();
});
/ 省略 /
다만, ViewHolder 등 특정의 변수에 붙이고 싶은 경우가 있거나, 이벤트의 바인드는 할 수 없다고 하는 불편함도 있는 것도 사실. 그렇다면 Kotlin 용 KotterKnife를 사용하는 것도 손입니다.
htps : // 기주 b. 코 m / 그럼 r 톤 / rok rk
갈망 포인트② WebSocket!
이것은 Kotlin 관련이 없습니다! w
완전히 자신의 경험 부족입니다. Kotlin을 공부하면서 Android 앱에서 WebSocket을 사용하는 방법도 조사했습니다. 실제로 해보니 Okhttp로 쉽게 구현할 수있었습니다! w
DetailActivity.kt/ 省略 /
private inner class EchoWebSocketListener : WebSocketListener() {
override fun onOpen(webSocket: WebSocket, response: Response) {
Timber.d("open")
}
override fun onMessage(webSocket: WebSocket?, text: String?) {
Timber.d("Receiving : " + text!!)
var currencyPairStream = mGson.fromJson(text, CurrencyPairStream::class.java)
activity.runOnUiThread({
price.text = if (currencyPairStream.lastPrice != null) {
currencyPairStream.lastPrice!!.price.toString()
} else {
currencyPairStream.price.toString()
}
})
}
override fun onMessage(webSocket: WebSocket, bytes: ByteString) {
Timber.d("Receiving bytes : " + bytes.hex())
}
override fun onClosing(webSocket: WebSocket?, code: Int, reason: String?) {
webSocket!!.close(1000, null)
Timber.d("Closing : $code / $reason")
}
override fun onFailure(webSocket: WebSocket?, t: Throwable?, response: Response?) {
Timber.d("Error : " + t?.message)
}
}
/ 省略 /
val request: Request = Request.Builder().url(getString(R.string.api_ws_base_url, mCurrencyPair)).build()
mWebSocket = mZaifClientWSOkHttpClient.newWebSocket(request, EchoWebSocketListener())
// TODO: 調べた感じ不要な気がする。詳しい人教えて下さいm(_ _)m
//mZaifClientWSOkHttpClient.dispatcher().executorService().shutdown()
갈망 포인트 3 Kotlin과 Java의 구문 차이
당연히 많은 분들이 주저하고 있어 위대한 선인님의 기사가 매우 참고가 되었습니다. 개인적으로 가장 당황한 것은 null의 취급입니까~. Java와 달리 Kotlin은 기본적으로 Null을 허용하지 않습니다. (?붙이거나?: 잡으면 Null도 취급할 수 있습니다만, 거기는 찬부양론 있는 곳…)
htps : // 코 m / 코헤르 / ms / b c58c01c6 f2 에세 658f
마지막으로
아직도 이 앱을 사용하기 쉽게 하고 싶다~라고 생각하고 있습니다. 사판, 매판 표시시키거나, 실제로 매매할 수 있도록 하거나. API의 형편상 차트는 어려울 것 같다.
열심히 할까요~.
Reference
이 문제에 관하여(Zaif 공식 Android 앱이 미묘하기 때문에 Kotlin 공부를 겸하여 통화 쌍 Viewer 앱을 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tarumzu/items/5700b357956d551b6e06
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
많은 분들이 신세를 졌을 것이다 ButterKnife입니다만, 필요 없습니다! !
라고 하는 것은 너무 말입니다만, 바인드 해 주지 않아도 Kotlin Android Extensions라고 하는 Kotlin 표준의 기능으로 직접 Layout의 요소를 취득할 수 있습니다. 이런 느낌.
activity_main.xml
/ 省略 /
<android.support.v4.widget.SwipeRefreshLayout
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:id="@+id/swiperefresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
/ 省略 /
MainActivity.kt
import kotlinx.android.synthetic.main.activity_main.*
/ 省略 /
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// xmlで定義したIDで取ってこれる!
swiperefresh.setOnRefreshListener({
Timber.d("onRefresh called from SwipeRefreshLayout");
initiateRefresh();
});
/ 省略 /
다만, ViewHolder 등 특정의 변수에 붙이고 싶은 경우가 있거나, 이벤트의 바인드는 할 수 없다고 하는 불편함도 있는 것도 사실. 그렇다면 Kotlin 용 KotterKnife를 사용하는 것도 손입니다.
htps : // 기주 b. 코 m / 그럼 r 톤 / rok rk
갈망 포인트② WebSocket!
이것은 Kotlin 관련이 없습니다! w
완전히 자신의 경험 부족입니다. Kotlin을 공부하면서 Android 앱에서 WebSocket을 사용하는 방법도 조사했습니다. 실제로 해보니 Okhttp로 쉽게 구현할 수있었습니다! w
DetailActivity.kt/ 省略 /
private inner class EchoWebSocketListener : WebSocketListener() {
override fun onOpen(webSocket: WebSocket, response: Response) {
Timber.d("open")
}
override fun onMessage(webSocket: WebSocket?, text: String?) {
Timber.d("Receiving : " + text!!)
var currencyPairStream = mGson.fromJson(text, CurrencyPairStream::class.java)
activity.runOnUiThread({
price.text = if (currencyPairStream.lastPrice != null) {
currencyPairStream.lastPrice!!.price.toString()
} else {
currencyPairStream.price.toString()
}
})
}
override fun onMessage(webSocket: WebSocket, bytes: ByteString) {
Timber.d("Receiving bytes : " + bytes.hex())
}
override fun onClosing(webSocket: WebSocket?, code: Int, reason: String?) {
webSocket!!.close(1000, null)
Timber.d("Closing : $code / $reason")
}
override fun onFailure(webSocket: WebSocket?, t: Throwable?, response: Response?) {
Timber.d("Error : " + t?.message)
}
}
/ 省略 /
val request: Request = Request.Builder().url(getString(R.string.api_ws_base_url, mCurrencyPair)).build()
mWebSocket = mZaifClientWSOkHttpClient.newWebSocket(request, EchoWebSocketListener())
// TODO: 調べた感じ不要な気がする。詳しい人教えて下さいm(_ _)m
//mZaifClientWSOkHttpClient.dispatcher().executorService().shutdown()
갈망 포인트 3 Kotlin과 Java의 구문 차이
당연히 많은 분들이 주저하고 있어 위대한 선인님의 기사가 매우 참고가 되었습니다. 개인적으로 가장 당황한 것은 null의 취급입니까~. Java와 달리 Kotlin은 기본적으로 Null을 허용하지 않습니다. (?붙이거나?: 잡으면 Null도 취급할 수 있습니다만, 거기는 찬부양론 있는 곳…)
htps : // 코 m / 코헤르 / ms / b c58c01c6 f2 에세 658f
마지막으로
아직도 이 앱을 사용하기 쉽게 하고 싶다~라고 생각하고 있습니다. 사판, 매판 표시시키거나, 실제로 매매할 수 있도록 하거나. API의 형편상 차트는 어려울 것 같다.
열심히 할까요~.
Reference
이 문제에 관하여(Zaif 공식 Android 앱이 미묘하기 때문에 Kotlin 공부를 겸하여 통화 쌍 Viewer 앱을 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tarumzu/items/5700b357956d551b6e06
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
/ 省略 /
private inner class EchoWebSocketListener : WebSocketListener() {
override fun onOpen(webSocket: WebSocket, response: Response) {
Timber.d("open")
}
override fun onMessage(webSocket: WebSocket?, text: String?) {
Timber.d("Receiving : " + text!!)
var currencyPairStream = mGson.fromJson(text, CurrencyPairStream::class.java)
activity.runOnUiThread({
price.text = if (currencyPairStream.lastPrice != null) {
currencyPairStream.lastPrice!!.price.toString()
} else {
currencyPairStream.price.toString()
}
})
}
override fun onMessage(webSocket: WebSocket, bytes: ByteString) {
Timber.d("Receiving bytes : " + bytes.hex())
}
override fun onClosing(webSocket: WebSocket?, code: Int, reason: String?) {
webSocket!!.close(1000, null)
Timber.d("Closing : $code / $reason")
}
override fun onFailure(webSocket: WebSocket?, t: Throwable?, response: Response?) {
Timber.d("Error : " + t?.message)
}
}
/ 省略 /
val request: Request = Request.Builder().url(getString(R.string.api_ws_base_url, mCurrencyPair)).build()
mWebSocket = mZaifClientWSOkHttpClient.newWebSocket(request, EchoWebSocketListener())
// TODO: 調べた感じ不要な気がする。詳しい人教えて下さいm(_ _)m
//mZaifClientWSOkHttpClient.dispatcher().executorService().shutdown()
당연히 많은 분들이 주저하고 있어 위대한 선인님의 기사가 매우 참고가 되었습니다. 개인적으로 가장 당황한 것은 null의 취급입니까~. Java와 달리 Kotlin은 기본적으로 Null을 허용하지 않습니다. (?붙이거나?: 잡으면 Null도 취급할 수 있습니다만, 거기는 찬부양론 있는 곳…)
htps : // 코 m / 코헤르 / ms / b c58c01c6 f2 에세 658f
마지막으로
아직도 이 앱을 사용하기 쉽게 하고 싶다~라고 생각하고 있습니다. 사판, 매판 표시시키거나, 실제로 매매할 수 있도록 하거나. API의 형편상 차트는 어려울 것 같다.
열심히 할까요~.
Reference
이 문제에 관하여(Zaif 공식 Android 앱이 미묘하기 때문에 Kotlin 공부를 겸하여 통화 쌍 Viewer 앱을 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tarumzu/items/5700b357956d551b6e06
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Zaif 공식 Android 앱이 미묘하기 때문에 Kotlin 공부를 겸하여 통화 쌍 Viewer 앱을 만들었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tarumzu/items/5700b357956d551b6e06텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)