Android

【Android】【Retrofit】Retrofit 2.0.1使い方メモとハマりどころメモ

2018/11/29 追記 UTF-8 以外の文字コードで POST / PUT を行う方法を追記しました。 RxJava 2.x 用の CallAdapter を追記しました。 前書き 最近Retrofitを使うことがあったんですが、イントロダクションをちょろっと読んだぐらいだと「え、そーなの?」と思…

【Android】Android の Data Binding でできること(基本編)

2018/12/01 追記 シンタックスハイライトを適用しました。 こんな場末の技術ブログを見るぐらいなら公式のドキュメントをちゃんと読んだほうがいいと思います。 記事公開当時は大した情報が記載されていませんでしたが、今はかなり充実しています。 前書き …

【Android】ブラウザからの Intent の送信とアプリがインストールされてない場合のフォールバック

2018/12/01 追記 シンタックスハイライトを適用しました。 前書き ここ半年ほどコードよりも日本語を書く仕事がメインになっていて、それはそれは退屈かつシビアなものだったのですが、最近はまたちょこちょこコードを書く仕事をしています。楽しいです。 色…

【Android】Volley各種設定メモ

ちょっとVolleyを使いたい要件があるんですが、公式のドキュメントを読んでも「いや知りたいのはそこじゃねーよ」と言うものばかりなのでメモしていきます。 JavaDocはこれを参考にしています。正直このJavaDocが生成されたのがいつ時点のビルドかわからない…

【Android】ListViewを使うための基礎知識(1)

Androidアプリを作り始めた人が必ずつまづくListViewのバッドノウハウを書き溜めていこうと思います。 AdapterViewのしくみ 全体的にそうなんですが、ListViewはListViewのドキュメントだけ読んでいても全然わかりません。AbsListViewのドキュメントもあわせ…

Oauth認証をServiceで行う(あるいは、Serviceの結果をBroadcastReceiverで受け取る)

AndroidでTwitter4Jを使ってOauth認証を行う方法は以前[Android][Twitter4J]AndroidでTwitter4Jを使うときのノウハウまとめ(前半)と言う記事で紹介したんですが、何と言うか、単刀直入に言うとバグっています。 具体的にどのような事象が発生するかと言う…

【Android】アイテムクリック時にイベントを発生させるListPreferenceを作成する

相変わらずこのような愚にもつかないクソアプリを作っています。まぁ、楽しいんですが…。それなりには。 設計上Preferenceを多用するのが一番楽だと判断しましたし、それは恐らく間違ってないんですが、PreferenceそのものがAndroid SDKにおけるBad Partの一…

【Android】PreferenceActivityで使えるPreferenceを自作する

つい先日、むしゃくしゃしてこのようなアプリを作成、公開しました。 このアプリ自体は内輪ネタの極みなので死ぬほどどうでもいいんですが、色々と個人的に初めての試みがあり、その辺のノウハウをメモしていきたいなと。 と言うわけで、今回は自分でPrefere…

【Android】XmlPullParser使い方まとめ

前回の記事では何の説明もなくXmlPullParserを使ってHTMLをパースしましたが、一応XmlPullParserそのものの使い方も説明しておこうと思います。英語が読めるならドキュメント読むだけで十分だとは思いますが…。 XMLをパースするためのものなので、当然XMLの…

【Android】XmlPullParserでHTMLをパースする

pixivだとかgyazoだとか、あの辺のサイトの画像もプレビュー表示できたらいいなと思ったはいいものの、どうしてもスクレイピングしないと画像のURLがわかりません。 以前AndroidでWebスクレイピングをやった時はJerichoのAndroid版を使ったんですが、(当時…

【Android】android.widget.Filterがひどすぎるので作り直す

ListViewのデータをフィルタリングするのであればFilterを使うのが一番簡単です。 簡単なんですが、使い物になりません。と言うわけで、継承して作り直します。 android.widget.Filterの挙動 AndroidにおけるFilterっていっぱいありすぎるのでandroid.widget…

【Android】Executorを使用して独自の非同期処理を実装する(3)

前回はAsyncTaskを参考にしつつ必要なものを実装していきました。 今回はAsyncTaskではやっていないExecutorService#shutdownに関する説明と、実際どうやって動かしていくのかを軽く解説して終わりにしたいと思います。 ExecutorServiceのシャットダウン Exe…

【Android】Executorを使用して独自の非同期処理を実装する(2)

前回はExecutor、って言うか、java.util.concurrentパッケージを使って非同期処理を行う方法、Androidで使うならHandlerも必要だよねって話、でもその辺全部を実装する汎用的なクラスを作るとAsyncTaskになっちゃうよ、と言う話をしました。 今回は実際に作…

【Android】Executorを使用して独自の非同期処理を実装する(1)

非同期での画像処理関連を直したり、UserStreamのイベントを処理するスレッドプールをAsyncTaskのスレッドプールと共有させたりしていたら、何だか処理が遅くなってしまいました。 と言うか、AsyncTaskのスレッドプールだけだと流石に厳しいって言うか、スレ…

【Android】非同期通信で画像を取得する際のノウハウまとめ(2)

HTTP経由で画像を取得、ついでにサイズを自動で補正するメソッドを作成しました。 public class ImageUtil { public static Bitmap getBitmapFromHttp(String url, Point maxSize, boolean isSaveCache) { HttpURLConnection con = null; InputStream in = n…

【Android】非同期通信で画像を取得する際のノウハウまとめ(1)

以前AndroidでTwitter4Jを使うときのノウハウまとめとか言う記事でさらさらっと、お茶漬け感覚で解説したんですが、色々といい方法を新たに見つけたのでまとめておきます。 以前の方法での問題点 ざっと列挙すると、こんな感じです。 端末のサイズより大きい…

【Android】端末の方向やディスプレイサイズから色々なものを動的に変更する

ようやく忙しさが(多少)やわらぎました。 相変わらず時間を見てはのんびりと自作のTwitterクライアントのためのコードを書いており、ちょっとしたネタもたまってきたので吐き出していきます。 端末の方向を動的に取得 / 固定する Androidの端末の回転に関…

【Android】ListViewとActionModeを併用する

一週間ほど開いてしまいました。珍しくみんな忙しくてですね…。 最近自作のTwitterクライアントを公開しまして、まだまだαリリース段階なので色々と機能を追加しているんですが、ActionModeとListViewのCHOICE_MODE_MULTIPLEを併用しようとしたら三日間ほど…

【Android】Androidで使用するProGuard勘案

世の中にはProGuardって言う、成果物の不要なクラス・メソッドを自動で削除してくれたり、難読化してくれたりするツールがあります。Support Libraryを使うときはこれも使ったほうがいいとオススメされていたり、ADTでそれなりにサポートされているので使っ…

【Android】ListViewのHeader / Footerに関する処理をハックする(考察編)

以前ListViewのHeader/FooterのViewに直接イベントを設定すると言う記事の最後で「って言うかそもそも、addHeaderView / addFooterViewにクリック時のハンドラを渡せるオーバーロードがあればよかったんですがねぇ。」と書いたんですが、もう自分でその機能…

【Android】AsyncTaskLoaderをもっと便利にする(実践編)

前回の続き…ってもう一ヶ月以上前なんですね。時の流れは早いものです。 別に書くのをサボっていたわけではなく(サボっていたけど)、まぁあの内容で大体なんとかなるので別に書かなくてもいっかなーと後回しにしていました。とりあえずもうクローズしてし…

【Android】Scala IDEを使ったAndroidの開発環境を構築する

特に何を作りたいわけでもないんですが、ちょっとしたツールを作るならJavaよりScalaの方が何かと楽ちんなので、開発環境を構築することにしました。 一昔前だと「Scalaで出来なくもないけどクソ重い」とか「ADTと衝突してビルドがクソ面倒」とかそんな記事…

【Android】クリック可能なToastをつくる(実装編)

Toastを作りなおそう。 androidのソースのライセンスがApache License 2.0じゃなかったら詰んでましたね。 とりあえずソースをコピペする 継承してどうにかなるものでもありません。ToastのソースをコピペするなりDLするなりして引っ張ってきて適当なプロジ…

【Android】クリック可能なToastをつくる(考察編)

今作っているTwitterのクライアントは常時UserStreamに接続、ふぁぼられたりRTされたりするとToastで表示すると言う誰しもが考えそうな承認欲求を満たすための機能がついています。 が、うっかり(n * 100)RT以上されるような長文Postをしてしまったがために…

【Android】Serviceとのプロセス間通信でデータを送受信する

AndroidではServiceを実装することでプロセス間で通信することが出来ます。 今回はMessengerを使ったServiceとActivityのデータの送受信方法について説明します。 Serviceとは? ドキュメントによるとこう説明されています。 サービスは、ユーザが異なるアプ…

【Android】Intentで渡すためのUriを作成する

Intent Filter編第二回です。今決めました。 前回はIntent Filterの設定方法と、暗黙的Intentを飛ばすときのお作法をやったので、実際にデータを送受信するUriの扱い方をまとめます。 URIのしくみ URIってそもそも何?とかそんな説明は面倒なんでしません。 …

【Android】暗黙的Intent と Intent Filter の使い方

2018/11/28 追記 リンクが切れている箇所を修正しました。 シンタックスハイライトを適用しました。 前書き AndroidManifest.xml にIntent Filterを設定しておくと、暗黙的 Intent を受信することが出来ます。 Intent は Android アプリの根幹に関わる仕組み…

【Android】FragmentPagerAdapterを実装し直す

以前「FragmentPagerAdapter is クソ」と言う話とともにとりあえずの対処法を書いたんですが、全然対処できないケースがあることに気づいたので、ちょっと本気を出してPagerAdapterを継承して実装しなおしました。 GitHubに動作確認用のActivityとFragmentも…

【Android】FragmentPagerAdapterを実装し直す(補足編)

前回の記事に対する補足事項です。 文字数制限に引っかかってしまったので別の記事になってしまいました。 dataSetChangedの動き そもそもPagerAdapter#notifyDataSetChanged()が呼ばれるとどうなるのでしょうか。 ViewPagerのdataSetChangedの動きをたどっ…

【Android】Androidプロジェクトでjavax.annotation.processing(APT)を使う

Sqliteを使っていると一々テーブル名やカラム名を文字列で書かないといけません。コード補完も効かなくて面倒です。 そんなわけで無理矢理コード補完が使えるよう、「テーブルのメタ情報だけを持ったクラス」を作成し、そっから参照するようにします。 が、…