- 投稿日:2019-05-26T20:31:23+09:00
SimpleDateFormatでParseExceptionが出るときの確認点
Rssフィールドから日付を取得していたら、parseExceptionが出ました。
parseExceptionが起こった時の確認点をまとめたいと思います。
エラーは下記になります
java.lang.RuntimeException: An error occurred while executing doInBackground() at android.support.v4.content.ModernAsyncTask$3.done(ModernAsyncTask.java:161) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383) at java.util.concurrent.FutureTask.setException(FutureTask.java:252) at java.util.concurrent.FutureTask.run(FutureTask.java:271) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) at java.lang.Thread.run(Thread.java:764) Caused by: java.text.ParseException: Unparseable date: "Fri, 24 May 2019 13:10:14 +0900" at java.text.DateFormat.parse(DateFormat.java:362) // (省略)①形式はあっているか?
Rss.ktval formatter = SimpleDateFormat("EEE, dd MM yyyy HH:mm:ss z")最初に上記のように記載してしまいました。
リファレンスを見てみると、形式に誤りがあることがわかりました。
文字 説明 使用例 y 年 yyyy = 2019
yy = 19M 月 MMMM = July
MMM= Jul
MM = 07
M = 7H 時間 HH = 08 m 分 mm=20 s 秒 ss= 58 z General タイムゾーン JST Z RFC 822 タイムゾーン +0900 a AM/PM AM k 1日の中での時間 13 K AM/PMの中での時間 01 上の表によると、
MM
という部分と、z
の部分を間違っていました。
大文字・小文字で意味が全く違うものもあるので、要注意です。
下記の形式でパースできるはずです。Rss.ktval formatter = SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z")②環境依存はないか?
①だけだと不完全です。
パースしてみると下記が出力されます。
金, 24 5 2019 13:10:14 +0900
曜日が日本語表示になっていました。
デフォルトが日本語になっているようでした。
SimpledateFormatで形式を設定するときにロケールを設定する必要があります。Rss.ktval formatter = SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", Locale.US)うまくパースできないときは上記のことを確認してみるといいかもしれません。
参照
Android Developers SimpleDateFormat
SimpleDateFormatクラスparseメソッドのLocaleに注意
- 投稿日:2019-05-26T19:32:24+09:00
【Kotlin】ボタンのタップ領域のみを拡張する
ボタンのサイズを変えずにタップ領域のみを拡張するという要件を実装していてハマったので備忘録として記事に残します。
コードだけ知りたいという方はこの記事の最後の方に載せていますのでそちらを確認してください。
どうやって実現するか
TouchDelegate
を使って実装します。
公式リファレンスはこちら上記の公式レファレンスで
Helper class to handle situations where you want a view to have a larger touch area than its actual view bounds.
と記載があるので今回の要件を実装する際の正攻法だと思います。
他にも良い方法がありましたらコメントで教えていただけると嬉しいです。TouchDelegate
TouchDelegate
を使って何をしているかというと
「タップ領域を拡張したいView(この例だとボタン)の祖先のViewに対して拡張したタップ領域(図のピンクの領域)を指定して、この領域内でタップイベントが発生した時の処理をタップ領域を拡張したいView(この例だとボタン)に委譲する」→ピンクの領域をタップした時の処理を、ボタンをタップした時の処理として扱う
ということをやっています。
ここでの注意点は、ピンクの領域を指定する祖先のViewにクリック処理を実装していた場合、ピンクの領域をタップしてボタンの処理が実行された後祖先のViewのクリックイベントが反応しなくなるという点です。TouchDelegateを使ってみる
前置きが長くなりましたが実際に
TouchDelegate
を使ってみます。
ピンクの領域は祖先のViewに対して指定できるので、ボタンから見て階層が上のViewであれば利用できるのですが、個人的には親のViewに対して指定するのが良いかなと思います。
何故かというと、ピンクの領域の座標をTouchDelegateを指定する祖先のViewからの相対座標で指定する必要があるからです。
※実際にタップ領域を拡張する時は
ConstraintLayout
やFrameLayout
に対して指定する場面が多いと思うので親ViewGroupとしてますがViewでも大丈夫です。コード
コードはこんな感じになります。
ViewEx.ktfunc View.expandTapArea() { val parentViewGroup = this.parent as ViewGroup parentViewGroup?.post { val rect = Rect() // <- ピンク領域のRect // ピンク領域のRectを生成 parentViewGroup.touchDelegate = TouchDelegate(rect, this) } } // 使い方 button.expandTapArea()以上です。
- 投稿日:2019-05-26T12:25:55+09:00
最近(2019/05)のAndroid開発でよく使われているっぽいライブラリまとめ
私は去年から真面目にAndroid開発を始めたのですが、プロダクトの開発で息するように使われているライブラリなどは誰も教えてくれず知るまでなかなか時間がかかりました。この記事ではこれからAndroid開発を始める人向けに今よく使われているライブラリをまとめます。
「よく使われている」は完全に主観です。
AAC
Android Architecture Componentsの略で、Android Jetpackのコンポーネントの一つです
https://developer.android.com/jetpack?hl=JA
AACに含まれるライブラリの中でも特によく使うものについて紹介します。
Data Binding Library
https://developer.android.com/topic/libraries/data-binding/?hl=JA
文字通りデータバインディングに使うライブラリです。私はMVVMでの開発でよく使ってます。XMLにオブジェクトをバインドしたり、後述するLiveDataなどで双方向のデータバインディングもできるので大変便利です。
Lifecycle
https://developer.android.com/topic/libraries/architecture/lifecycle?hl=JA
ActivityやFragmentのライフサイクルを管理します。LifecycleObserverを使うとActivityやFragmentのライフサイクルイベントを他のクラスで監視することができるのでとても便利です。
LiveData
https://developer.android.com/topic/libraries/architecture/livedata?hl=JA
LiveDataはライフサイクルと連動して、値の変更を通知することができます。私はRxのSubjectを使ってレイヤー間の通知を行っていた部分をLiveDataに置き換えました。双方向のデータバインディングにも利用できて便利です。
Room
https://developer.android.com/topic/libraries/architecture/room?hl=JA
RoomではSQLiteをスムーズに使えるようなインターフェースを提供しています。私はそこまでがっつり使ってないのでなんとも言えません。
ViewModel
https://developer.android.com/topic/libraries/architecture/viewmodel?hl=JA
ViewModelはActivityやFragmentのライフサイクルと関連づけてUI関連のデータを管理することができます。いわゆるMVVMのViewModelとは文脈が少々異なる物だと思いますが、MVVMでのアプリケーション開発にはとても役立ちます。私はめちゃくちゃ使っています。
その他
- WorkManager
- ぶっちゃけ使ったことないので知りません
- Navigation
- 遷移周りを管理します。safeArgs(Fragment間でのデータ受け渡しに使えるモノ)が便利だった
- Paging
- ぶっちゃけ使ったことないので知りません
通信周り
okhttp + retrofit + RxJava(RxKotlin) + RxAndroid + moshi(gson)
みたいな構成をよく見ます。 最近はcoroutineを使った非同期処理もよく見かけます。HTTPクライアント
okhttp
https://github.com/square/okhttp
デファクトでしょう。私はこれが無いと生きていけないです。
retrofit2
https://github.com/square/retrofit
RESTをいい感じに扱えるライブラリ。okhttpと一緒に使うことが多し。
JSONパーサ
一昔前はJacksonが使われていたらしい?
gson
https://github.com/google/gson
google製です。よく見ます。私はDeserializerを自分で書かなきゃいけない時など複雑な要件の時に使ってます。
moshi
https://github.com/square/moshi
square製です。最近は専らこっちを使ってます。
kotshi
https://github.com/ansman/kotshi
kotlin実装です。kotlin向けのMoshiのadapter。
画像
glide
https://github.com/bumptech/glide
画像表示には欠かせない存在です。よく見ます。
picasso
https://github.com/square/picasso
こっちもよく見ます。体感的にはglideの方が使われてそう。
Rx
RxJava
https://github.com/ReactiveX/RxJava
リアクティブプログラミングというパラダイムのコード記述ができます。学習コストは高いですが覚えると大変便利です。非同期処理用のライブラリだと思われがち。最近は他の技術に置き換える流れを感じますがまだまだ色んなところで使われているし個人的にはこれが無いとかなり辛い。
RxKotlin
https://github.com/ReactiveX/RxKotlin
RxJavaのKotlin拡張です。KotlinでRxを使うならぜひ導入しましょう。
RxAndroid
https://github.com/ReactiveX/RxAndroid
Android開発におけるRxJavaでの非同期通信には欠かせない存在です。
RecyclerView
groupie
https://github.com/lisawray/groupie
最近人気すぎて怖い。でも確かに便利です。
epoxy
https://github.com/airbnb/epoxy
airbnb製。ぶっちゃけ使ったこと無いのでよくわかりませんが便利そう。MvRxや他のairbnb製のライブラリと相性が良さげです。
デバッグ関連
Log代替
timber
https://github.com/JakeWharton/timber
android.util.Logのラッパーです。誰も教えてくれないけどみんな使ってます(主観)。ビルドタイプによる機能の切り替えなどができます。
メモリ管理
leakcanary
https://github.com/square/leakcanary
信頼と実績のsquare製。アプリのメモリリークを検出し、通知します。当たり前のように使われている感じがします。
通信ログ周り
stetho
https://github.com/facebook/stetho
okhttpに噛ませるとChromeで通信ログなどが見れます。めちゃ便利。
flipper
https://github.com/facebook/flipper
Facebook製。Android以外のプラットフォームでも使えます。使ってる人見たことないです。stethoで良くね?
その他
Hyperion-Android
https://github.com/willowtreeapps/Hyperion-Android
色々できます。詳しくはこちらの記事を見てください。
DI
Dependency Injectionの略です。最近は知ってて当たり前感があります。参考
dagger2
https://github.com/google/dagger
square発google製。めちゃくちゃ使われてます。学習コストはかなり高いと思います。
koin
https://github.com/InsertKoinIO/koin
kotlin実装のDIライブラリ。知名度も上がってきて勢いを感じます。daggerよりわかりやすいので私は好きです。
テスト周り
mockito
https://github.com/mockito/mockito
モッキングフレームワークです。デファクト感があります。
mockk
https://github.com/mockk/mockk
kotlin実装のモッキングライブラリです。最近見かけるようになりました。
その他
ThreeTenABP
https://github.com/JakeWharton/ThreeTenABP
Androidで日付を簡単に扱えるライブラリ。誰も教えてくれないけど大変便利で使ってる人も多いはず。
所感
- Java -> Kotlinの流れを強く感じます(koinとか)
- 最近のAndroid開発ではdaggerやRxなど学習コストの高いものを覚える必要があり、開発を始める敷居が高くなっているように思います
- 「これはみんな使ってるっしょ!」みたいなライブラリがあれば是非教えてください
- 投稿日:2019-05-26T12:25:55+09:00
最近のAndroid開発でよく使われているっぽいライブラリまとめ(2019/05)
私は去年から真面目にAndroid開発を始めたのですが、プロダクトの開発で息するように使われているライブラリなどは誰も教えてくれず知るまでなかなか時間がかかりました。この記事ではこれからAndroid開発を始める人向けに今よく使われているライブラリをまとめます。
「よく使われている」は完全に主観です。
AAC
Android Architecture Componentsの略で、Android Jetpackのコンポーネントの一つです
https://developer.android.com/jetpack?hl=JA
AACに含まれるライブラリの中でも特によく使うものについて紹介します。
Data Binding Library
https://developer.android.com/topic/libraries/data-binding/?hl=JA
文字通りデータバインディングに使うライブラリです。私はMVVMでの開発でよく使ってます。XMLにオブジェクトをバインドしたり、後述するLiveDataなどで双方向のデータバインディングもできるので大変便利です。
Lifecycle
https://developer.android.com/topic/libraries/architecture/lifecycle?hl=JA
ActivityやFragmentのライフサイクルを管理します。LifecycleObserverを使うとActivityやFragmentのライフサイクルイベントを他のクラスで監視することができるのでとても便利です。
LiveData
https://developer.android.com/topic/libraries/architecture/livedata?hl=JA
LiveDataはライフサイクルと連動して、値の変更を通知することができます。私はRxのSubjectを使ってレイヤー間の通知を行っていた部分をLiveDataに置き換えました。双方向のデータバインディングにも利用できて便利です。
Room
https://developer.android.com/topic/libraries/architecture/room?hl=JA
RoomではSQLiteをスムーズに使えるようなインターフェースを提供しています。私はそこまでがっつり使ってないのでなんとも言えません。
ViewModel
https://developer.android.com/topic/libraries/architecture/viewmodel?hl=JA
ViewModelはActivityやFragmentのライフサイクルと関連づけてUI関連のデータを管理することができます。いわゆるMVVMのViewModelとは文脈が少々異なる物だと思いますが、MVVMでのアプリケーション開発にはとても役立ちます。私はめちゃくちゃ使っています。
その他
- WorkManager
- ぶっちゃけ使ったことないので知りません
- Navigation
- 遷移周りを管理します。safeArgs(Fragment間でのデータ受け渡しに使えるモノ)が便利だった
- Paging
- ぶっちゃけ使ったことないので知りません
通信周り
okhttp + retrofit + RxJava(RxKotlin) + RxAndroid + moshi(gson)
みたいな構成をよく見ます。 最近はcoroutineを使った非同期処理もよく見かけます。HTTPクライアント
okhttp
https://github.com/square/okhttp
デファクトでしょう。私はこれが無いと生きていけないです。
retrofit2
https://github.com/square/retrofit
RESTをいい感じに扱えるライブラリ。okhttpと一緒に使うことが多し。
JSONパーサ
一昔前はJacksonが使われていたらしい?
gson
https://github.com/google/gson
google製です。よく見ます。私はDeserializerを自分で書かなきゃいけない時など複雑な要件の時に使ってます。
moshi
https://github.com/square/moshi
square製です。最近は専らこっちを使ってます。
kotshi
https://github.com/ansman/kotshi
kotlin実装です。kotlin向けのMoshiのadapter。
画像
glide
https://github.com/bumptech/glide
画像表示には欠かせない存在です。よく見ます。
picasso
https://github.com/square/picasso
こっちもよく見ます。体感的にはglideの方が使われてそう。
Rx
RxJava
https://github.com/ReactiveX/RxJava
リアクティブプログラミングというパラダイムのコード記述ができます。学習コストは高いですが覚えると大変便利です。非同期処理用のライブラリだと思われがち。最近は他の技術に置き換える流れを感じますがまだまだ色んなところで使われているし個人的にはこれが無いとかなり辛い。
RxKotlin
https://github.com/ReactiveX/RxKotlin
RxJavaのKotlin拡張です。KotlinでRxを使うならぜひ導入しましょう。
RxAndroid
https://github.com/ReactiveX/RxAndroid
Android開発におけるRxJavaでの非同期通信には欠かせない存在です。
RecyclerView
groupie
https://github.com/lisawray/groupie
最近人気すぎて怖い。でも確かに便利です。
epoxy
https://github.com/airbnb/epoxy
airbnb製。ぶっちゃけ使ったこと無いのでよくわかりませんが便利そう。MvRxや他のairbnb製のライブラリと相性が良さげです。
デバッグ関連
Log代替
timber
https://github.com/JakeWharton/timber
android.util.Logのラッパーです。誰も教えてくれないけどみんな使ってます(主観)。ビルドタイプによる機能の切り替えなどができます。
メモリ管理
leakcanary
https://github.com/square/leakcanary
信頼と実績のsquare製。アプリのメモリリークを検出し、通知します。当たり前のように使われている感じがします。
通信ログ周り
stetho
https://github.com/facebook/stetho
okhttpに噛ませるとChromeで通信ログなどが見れます。めちゃ便利。
flipper
https://github.com/facebook/flipper
Facebook製。Android以外のプラットフォームでも使えます。使ってる人見たことないです。stethoで良くね?
その他
Hyperion-Android
https://github.com/willowtreeapps/Hyperion-Android
色々できます。詳しくはこちらの記事を見てください。
DI
Dependency Injectionの略です。最近は知ってて当たり前感があります。参考
dagger2
https://github.com/google/dagger
square発google製。めちゃくちゃ使われてます。学習コストはかなり高いと思います。
koin
https://github.com/InsertKoinIO/koin
kotlin実装のDIライブラリ。知名度も上がってきて勢いを感じます。daggerよりわかりやすいので私は好きです。
テスト周り
mockito
https://github.com/mockito/mockito
モッキングフレームワークです。デファクト感があります。
mockk
https://github.com/mockk/mockk
kotlin実装のモッキングライブラリです。最近見かけるようになりました。
その他
ThreeTenABP
https://github.com/JakeWharton/ThreeTenABP
Androidで日付を簡単に扱えるライブラリ。誰も教えてくれないけど大変便利で使ってる人も多いはず。
所感
- Java -> Kotlinの流れを強く感じます(koinとか)
- 最近のAndroid開発ではdaggerやRxなど学習コストの高いものを覚える必要があり、開発を始める敷居が高くなっているように思います
- 「これはみんな使ってるっしょ!」みたいなライブラリがあれば是非教えてください