ボクココ

個人開発に関するテックブログ

Android

スマホアプリ開発に先駆けて

ども、@kimihom です。 2021 年の新しい挑戦の1つとして、スマホアプリ開発がある。 私自身の経験を伝えると、6,7年前ごろに Android アプリで Java で開発していたことがある。これは仕事でガッツリ実装してたので、だいぶ詳しくはなかったが、それでもだい…

Firebase はアプリ開発者のヒーローとなるか

ども、@kimihom です。 今日 Firebase の勉強会に行った。あらかじめ動画とかで Firebase の予習はしてたんだけど、今回の勉強会で実際のユースケースとか具体的な使い方を知ったことでよりイメージが湧いた。そこで感じた Firebase について今回はちょろっ…

スワイプでViewが移動するViewを作った

SwipePalletView を OSSで公開した。 こんな感じでちょっとスワイプしたら端っこまで自動で移動するようなViewだ。 使い方とかは上記サイトを見ていただくとして、今回は androidで初めてカスタムビューを作ったので、その作り方的なのを書いてみる。 カスタ…

ViewPager を DialogFragment で表示する

Android ではおなじみの ViewPager。 これを使えば、スワイプで画面切り替えを簡単に実装することができる。スマホアプリらしいアプリを作るなら、これはよく使うと思う。 さて、これをダイアログで出したいと思った時の手順をここにまとめよう。思いの外は…

Android の EventBus がめちゃくちゃ便利な件について

ライブラリで久々に感動した。これはマジックだ。今回は、greenrobot/EventBus · GitHub を紹介する。 よくアクティビティに独自のコールバックオブジェクトを実装させて、それを他のクラスで渡して実行させる処理がよくあると思う。以下は例。 interface Ca…

爆速 Android アプリ開発をサポートする Bootroid をOSS化しました

Bootroid は、特に JSON API を通じてサーバとやりとりする Android アプリ開発を爆速化するフレームワークです。 一般的な Web サービスをAndroidアプリで実現しようとした際に有用です。 インストール方法などは上記リンク先を参照していただくとして、こ…

Google Mobile App Developer Panel に参加してみた

今日こんなメールが届いた。 読んでみると、どうやらAndroid デベロッパー同士のコミュニティーの場のようだ。何かしら有益な情報がメールでくるかもしれないと思い、登録してみた。 これは Google Play に登録している人限定っぽいのでURLは乗っけられない…

Android でのオブジェクトを保存する便利な方法

Android で端末にデータ保存をする時は以下の選択肢になるかと思う。 ファイルとして保存 (SDカードなど) SQLiteデータベースに保存 SharedPreference に保存 それら一つ一つに長所・短所があり、使いどころがあるのだけれど、それぞれのメリットを合わせた…

Android で Font Awesome を使うのがなかなかいい感じ

Android でアイコン作るときは、まぁ普通は Action Bar Icon Pack とかをよく使うと思う。自分もそれを好んで利用していた。 ただ、これには以下のような欠点がある。 使う画像を利用する度にコピーするがだるい 要領がどんどん大きくなる 種類が少ない さて…

インタフェースを実装したオブジェクトの共通処理をどうにかする

久々にJavaネタ。 interface を用意し、複数のそれを実装したオブジェクトを作ったとき、それぞれ実装したメソッドの中身が似通って困っちゃうってことがあった。その時にどうすればいいかの対応。 interface Outputtable { void output(); } class MyCode i…

Android の NumberPicker を任意のSTEPでセットするときの対応

NumberPickerを使うたびに詰まってる気がするのでメモ。 NumberPickerで例えばminが500, max が 5000, step が500としたい場合、これがなかなかわかりにくい。メソッドを呼ぶだけで問題が起きないようにリファクタリングした。今後はNumberPickerを使い際は…

Android の Google Plus ログインで SIGN_IN_REQUIRED で内部エラー

久々に発狂しそうなレベルで詰まった。 Google Plus ログインで以下のようなコードを書くことになる。 @Override public void onConnectionFailed(ConnectionResult result) { Log.e(TAG, result.toString()); if (result.hasResolution()) { try { result.s…

Volley の2重リクエストを防ぐ

結構よく起きるので、メモ。 これが起きてしまう原因は、サーバのレスポンス速度が遅いことにある。 サーバ内でメール送信してたりとか(本当はキューに溜めるべきだが)、アクセスが多くなってきたりしたりとかで遅くなると、Volleyはもう一回リクエストを送…

Android の ScrollView で EditText のキーボード非表示にしつつトップに移動する

毎回 ScrollView 付きのフォームを作るときに苦戦するのでメモ。 例えば、保存ボタンがScrollViewの一番下にあり、それを押すと検証が走る。 検証が失敗した時は一番上にエラーメッセージを出したいといった場合。 問題は、途中にあるEditTextのキーボードを…

Volley + Gson + Generics = God! (Android で OAuth な Rest Api のクライアント作成)

Android アプリでよくあるパターンとしては Restful な Web API を呼んで、リストや詳細を表示などが挙げられる。こんなとき、JSONで通信しているのであれば、リクエストのパラメータを作り、レスポンスを解析するというコードを書く必要がある。これが例外…

Android における EditText のクールなバリデーション実装

Android アプリによっては結構たくさんのEditTextが出て来て、それらを一つずつ検証しないといけない場面ってのはよくある。これら一つ一つに、以下のことを書いている方は多いのではないだろうか。 if (editText.getText().toString().isEmpty()) { // 入力…

Android の ViewPager で使う Fragment の注意点

Android アプリ開発で便利な ViewPager . 画面のスワイプが簡単に実装できるのでどんなアプリを作るにも役立つ。 これはFragmentを使っていて、今回そのFragment周りを中心にどう実装するのかをまとめる。 ViewPager に FragmentStatePagerAdapter を setAda…

Java の enum 再入門。enumがあると何が嬉しいのか

ども@kimihomです。 enum って案外使わなくても何とかなる場合が多くて、今ままであまり使ってこなかった方は多いのではないでしょうか? しかし、このenumはソースの可読性を向上させる上で、知らなくてはならないテクニックの1つだと思います。そこで今日…

複数アプリ間でSharedPreferenceを使ったときのキャッシュ問題

いやーこれはやられた。 Context.MODE_WORLD_READABLEで保存したSharedPreferenceを外部から読み込むときに getSharedPreference が ShardPreference インスタンスがキャッシュしてるせいで、保存元のアプリでSharedPreferenceの中身を保存しても参照するア…

Androidアプリ開発者が実践すべきエミュレータの高速化

久々にサービスで感動したので投稿。 今回紹介するのは Genymotion というもの。 どんな仕組みかというと、Android はLinuxベースでできたOSなので、それをVirtualBox で仮想マシンとして起動する、というもの。おそらく内部的にVagrantのようなものでプログ…

Android におけるバックグラウンド処理の使い分け

個人的なバックグラウンド処理における見解をまとめる。 Service の使い時 アプリを終了しても裏側で何かをさせたい時に使う。これは Service しかできない。(Service は別プロセスで動くため) 一時的に裏側で処理をさせたい時は、 AsyncTask や Thread-Ha…

IntentService で Unable to instantiate service

IntentService のサンプルを作っていて、上記エラーが出たのでメモ。 具体的なエラーはこんな感じ java.lang.RuntimeException: Unable to instantiate service com.sample.SampleService: java.lang.InstantiationException: com.sample.SampleService 原因…

SQLiteOpenHelper の execSQL で2文まとめて実行してはいけない

久々のAndroidエントリー。 SQLiteOpenHelper#execSQL(str) は strのSQLをそのまま実行してくれる便利なメソッドだが、これに create table や alter table add column などをまとめて ; でつなげて実行すると、テーブルやカラムは出来上がるが、プログラム…

GreenDAOを使ってみた

GreenDaoはいわばAndroidのSQLiteのORM。 デフォルトのSQLiteの操作は、使いにくいしお決まりの作法をコピペしたりと色々ひどいので、こういうのはフレームワークに任せたいところ。 環境作り jarの用意 greendao、greendao-generator、freemarker.jarをそれ…

RoboGuiceテストの仕方の翻訳をしてみた

https://code.google.com/p/roboguice/wiki/Testing こちらを勉強を兼ねて翻訳します。 Testing RoboGuiceアプリのテストの仕方 始める前に ユニットテストをするための完全な説明はこのドキュメントの範囲を超えるが、これはより多くの共通のミスを防ぐのを…

Webの人がAndroidアプリを作ってみて大事だな、と思ったことのまとめ

ちょっと前までの自分は、プライベートでRails, 仕事でPHPというWeb屋でしたが、最近になってプライベートも仕事もAndroidをいじるようになりました。 そこで感じたWebとの違い、今後のアプリ開発で押さえておきたいポイントを軽くまとめてみます。題して「A…

Androidアプリ公開しました

今までちょくちょく開発を進めていたAndroidアプリですが、一区切りついたので公開しました。シェアカメラ https://play.google.com/store/apps/details?id=com.fiveearth.cloudcamera 詳しくは↑の説明をちらっと見てくれればわかるかと。以下のようなことが…

AlarmClock 動かすまで

OSSのAlarmClockのソースをみて勉強しようと思い、最初動かすまでのメモを残しておく。 Github: https://github.com/android/platform_packages_apps_alarmclock AlarmClock修正メモAlarmLlaxon.java L89 //mVibrator = new Vibrator(); mVibrator = (Vibra…