Android
2018/11/29 追記 UTF-8 以外の文字コードで POST / PUT を行う方法を追記しました。 RxJava 2.x 用の CallAdapter を追記しました。 前書き 最近Retrofitを使うことがあったんですが、イントロダクションをちょろっと読んだぐらいだと「え、そーなの?」と思…
2018/12/01 追記 シンタックスハイライトを適用しました。 こんな場末の技術ブログを見るぐらいなら公式のドキュメントをちゃんと読んだほうがいいと思います。 記事公開当時は大した情報が記載されていませんでしたが、今はかなり充実しています。 前書き …
2018/12/01 追記 シンタックスハイライトを適用しました。 前書き ここ半年ほどコードよりも日本語を書く仕事がメインになっていて、それはそれは退屈かつシビアなものだったのですが、最近はまたちょこちょこコードを書く仕事をしています。楽しいです。 色…
ちょっとVolleyを使いたい要件があるんですが、公式のドキュメントを読んでも「いや知りたいのはそこじゃねーよ」と言うものばかりなのでメモしていきます。 JavaDocはこれを参考にしています。正直このJavaDocが生成されたのがいつ時点のビルドかわからない…
Androidアプリを作り始めた人が必ずつまづくListViewのバッドノウハウを書き溜めていこうと思います。 AdapterViewのしくみ 全体的にそうなんですが、ListViewはListViewのドキュメントだけ読んでいても全然わかりません。AbsListViewのドキュメントもあわせ…
AndroidでTwitter4Jを使ってOauth認証を行う方法は以前[Android][Twitter4J]AndroidでTwitter4Jを使うときのノウハウまとめ(前半)と言う記事で紹介したんですが、何と言うか、単刀直入に言うとバグっています。 具体的にどのような事象が発生するかと言う…
相変わらずこのような愚にもつかないクソアプリを作っています。まぁ、楽しいんですが…。それなりには。 設計上Preferenceを多用するのが一番楽だと判断しましたし、それは恐らく間違ってないんですが、PreferenceそのものがAndroid SDKにおけるBad Partの一…
つい先日、むしゃくしゃしてこのようなアプリを作成、公開しました。 このアプリ自体は内輪ネタの極みなので死ぬほどどうでもいいんですが、色々と個人的に初めての試みがあり、その辺のノウハウをメモしていきたいなと。 と言うわけで、今回は自分でPrefere…
前回の記事では何の説明もなくXmlPullParserを使ってHTMLをパースしましたが、一応XmlPullParserそのものの使い方も説明しておこうと思います。英語が読めるならドキュメント読むだけで十分だとは思いますが…。 XMLをパースするためのものなので、当然XMLの…
pixivだとかgyazoだとか、あの辺のサイトの画像もプレビュー表示できたらいいなと思ったはいいものの、どうしてもスクレイピングしないと画像のURLがわかりません。 以前AndroidでWebスクレイピングをやった時はJerichoのAndroid版を使ったんですが、(当時…
ListViewのデータをフィルタリングするのであればFilterを使うのが一番簡単です。 簡単なんですが、使い物になりません。と言うわけで、継承して作り直します。 android.widget.Filterの挙動 AndroidにおけるFilterっていっぱいありすぎるのでandroid.widget…
前回はAsyncTaskを参考にしつつ必要なものを実装していきました。 今回はAsyncTaskではやっていないExecutorService#shutdownに関する説明と、実際どうやって動かしていくのかを軽く解説して終わりにしたいと思います。 ExecutorServiceのシャットダウン Exe…
前回はExecutor、って言うか、java.util.concurrentパッケージを使って非同期処理を行う方法、Androidで使うならHandlerも必要だよねって話、でもその辺全部を実装する汎用的なクラスを作るとAsyncTaskになっちゃうよ、と言う話をしました。 今回は実際に作…
非同期での画像処理関連を直したり、UserStreamのイベントを処理するスレッドプールをAsyncTaskのスレッドプールと共有させたりしていたら、何だか処理が遅くなってしまいました。 と言うか、AsyncTaskのスレッドプールだけだと流石に厳しいって言うか、スレ…
HTTP経由で画像を取得、ついでにサイズを自動で補正するメソッドを作成しました。 public class ImageUtil { public static Bitmap getBitmapFromHttp(String url, Point maxSize, boolean isSaveCache) { HttpURLConnection con = null; InputStream in = n…
以前AndroidでTwitter4Jを使うときのノウハウまとめとか言う記事でさらさらっと、お茶漬け感覚で解説したんですが、色々といい方法を新たに見つけたのでまとめておきます。 以前の方法での問題点 ざっと列挙すると、こんな感じです。 端末のサイズより大きい…
ようやく忙しさが(多少)やわらぎました。 相変わらず時間を見てはのんびりと自作のTwitterクライアントのためのコードを書いており、ちょっとしたネタもたまってきたので吐き出していきます。 端末の方向を動的に取得 / 固定する Androidの端末の回転に関…
一週間ほど開いてしまいました。珍しくみんな忙しくてですね…。 最近自作のTwitterクライアントを公開しまして、まだまだαリリース段階なので色々と機能を追加しているんですが、ActionModeとListViewのCHOICE_MODE_MULTIPLEを併用しようとしたら三日間ほど…
世の中にはProGuardって言う、成果物の不要なクラス・メソッドを自動で削除してくれたり、難読化してくれたりするツールがあります。Support Libraryを使うときはこれも使ったほうがいいとオススメされていたり、ADTでそれなりにサポートされているので使っ…
以前ListViewのHeader/FooterのViewに直接イベントを設定すると言う記事の最後で「って言うかそもそも、addHeaderView / addFooterViewにクリック時のハンドラを渡せるオーバーロードがあればよかったんですがねぇ。」と書いたんですが、もう自分でその機能…
前回の続き…ってもう一ヶ月以上前なんですね。時の流れは早いものです。 別に書くのをサボっていたわけではなく(サボっていたけど)、まぁあの内容で大体なんとかなるので別に書かなくてもいっかなーと後回しにしていました。とりあえずもうクローズしてし…
特に何を作りたいわけでもないんですが、ちょっとしたツールを作るならJavaよりScalaの方が何かと楽ちんなので、開発環境を構築することにしました。 一昔前だと「Scalaで出来なくもないけどクソ重い」とか「ADTと衝突してビルドがクソ面倒」とかそんな記事…
Toastを作りなおそう。 androidのソースのライセンスがApache License 2.0じゃなかったら詰んでましたね。 とりあえずソースをコピペする 継承してどうにかなるものでもありません。ToastのソースをコピペするなりDLするなりして引っ張ってきて適当なプロジ…
今作っているTwitterのクライアントは常時UserStreamに接続、ふぁぼられたりRTされたりするとToastで表示すると言う誰しもが考えそうな承認欲求を満たすための機能がついています。 が、うっかり(n * 100)RT以上されるような長文Postをしてしまったがために…
AndroidではServiceを実装することでプロセス間で通信することが出来ます。 今回はMessengerを使ったServiceとActivityのデータの送受信方法について説明します。 Serviceとは? ドキュメントによるとこう説明されています。 サービスは、ユーザが異なるアプ…
Intent Filter編第二回です。今決めました。 前回はIntent Filterの設定方法と、暗黙的Intentを飛ばすときのお作法をやったので、実際にデータを送受信するUriの扱い方をまとめます。 URIのしくみ URIってそもそも何?とかそんな説明は面倒なんでしません。 …
2018/11/28 追記 リンクが切れている箇所を修正しました。 シンタックスハイライトを適用しました。 前書き AndroidManifest.xml にIntent Filterを設定しておくと、暗黙的 Intent を受信することが出来ます。 Intent は Android アプリの根幹に関わる仕組み…
以前「FragmentPagerAdapter is クソ」と言う話とともにとりあえずの対処法を書いたんですが、全然対処できないケースがあることに気づいたので、ちょっと本気を出してPagerAdapterを継承して実装しなおしました。 GitHubに動作確認用のActivityとFragmentも…
前回の記事に対する補足事項です。 文字数制限に引っかかってしまったので別の記事になってしまいました。 dataSetChangedの動き そもそもPagerAdapter#notifyDataSetChanged()が呼ばれるとどうなるのでしょうか。 ViewPagerのdataSetChangedの動きをたどっ…
Sqliteを使っていると一々テーブル名やカラム名を文字列で書かないといけません。コード補完も効かなくて面倒です。 そんなわけで無理矢理コード補完が使えるよう、「テーブルのメタ情報だけを持ったクラス」を作成し、そっから参照するようにします。 が、…