androidandroid2015-01-29ResourceIdからResourceNameを取得するAndroidContextの以下のメソッドを使うと取得できる。idResourceIdからResourceNameを取得する2015-01-28RobolectricでExecutorServiceを使った非同期処理のテストを行うAndroidまたRobolectricのつらみ記事です。非同期処理のテストを行う場合、Robolectric.runBackgroundTasks();を使ってBackgroundTaskを実行するが、ExecutorServiceを使って非同期にしている場合はrunBackgroundTasksが効かなかった。hackな方法しか見つからなかった。RobolectricTestRunnerのサブクラス(MyTestRunner)を作る。@Overr...Robolectricでテスト実行時にassetsフォルダ・resourcesフォルダを複数設定する2015-01-26Mockitoで戻り値がvoidのメソッドをMockするAndroidspyでやる場合は以下のように書く。targetのcheckメソッドをMockにする。Mocito.<引数の型>any()を渡す。doNothing().when(target).che...Mockitoで戻り値がvoidのメソッドをMockする2015-01-25Robolectricでテスト実行開始時に一度だけ処理を実行させるAndroidRobolectricで単体テスト実行中にBuild.VERSION.RELEASEからOSのバージョンを取得すると、"unknown"が返ってくる。これでは都合が悪いので、テスト実行開始時にBuild.VERSION.RELEASEを書き換えてやろうと思ったのが事の発端。これが結構大変だった。StudioのTips)Androidpotatotips#14に行ってきます。14回もやってるんだねぇ。Oneでアプリを表示するとレイアウトが崩れて悲しい思いをしたのでどうレイアウトを作ればいいか調べた。dp単位でも端末によって横幅は多少違いが出るらしい。320~384に収まっているのでこの両端でチェックすればOKであろうという結論になった。restoreを簡単に書けるIcepickが便利Android使い方は下記記事参照。これでInstanceStateの取り扱いのダルさがかなり軽減されそう。アプリの状態の復元ぐらいラインタイムの方でやってよ。workflowを使って起動できるようにしたい。手でやる場合の手順は以下。centralに登録されているライブラリを検索できる。butterで検索しても何も表示されなかったが、butterknifeで検索したらヒットした。centralに登録されているライブラリを楽にbuild.gradleに追加する2015-01-19呼び出されたクラス、インスタンスのHash値、メソッド名をログに出すメソッドを実装するAndroidライフサイクルイベントがどんな順番で呼ばれているかなど調べるときに、メソッドにログを仕込むことは良くある。これを簡単に実装するには以下のようにする。getStackTrace()[3]の3の理由は0,1にはVMやthreadのメソッド名が入っているため。killしてから、アプリを再起動した時にステップ実行する方法AndroidAndroidでは裏にいるアプリをOSがKillすることがある。この時の挙動をデバッグしたい場合の手順は以下。キーボードからアプリに文字を入力したい・・・と思いその方法を探してみた。以下の手順で入力できるようになる。Attributesがめっちゃ便利だった。CustomViewクラスを作っている場合はisInEditMode()を使ってちゃんとプレビュー出来るようにしておくことが大事。Attributesが便利2015-01-14Androidで処理をメインスレッドにスイッチしつつDelayをかけるAndroidある秒数だけ待ってメインスレッドである処理をしたい場合、HandlerのpostDelayedを使えば良い。遅延実行させるのにTimerオブジェクト使ってたけど、いらなかった。修正前のコードは以下。setHoge(null);を呼んでいるところでエラーになる。原因はnullには型情報が無いので、どっちのメソッドを呼べばいいかが分からないため。call」エラー2015-01-11MacのDiffツールはKaleidoscopeが良いAndroidメリデメは以下。3カラム表示でのマージが楽。コレに慣れると1カラムでマージとか良くやってたな・・・と思う。マージ機能が賢いっぽい。theme」エラーAndroid原因はアプリ独自のThemeを定義していたが、textviewstyleをその中で定義していなかったこと。styleを一つずつ定義していくのは大変なので親Themeを指定して解決した。styles.xmlは以下のような感じ。threadでしかできない操作をしていること。threadで実行するようにすると直った。threadにスイッチするAndroidやり方は以下。threadで実行される。threadにスイッチする2015-01-07ListViewのItemの高さをlayout_heightに設定しても高さが変化しないAndroid原因は恐らく以下。CustomViewクラスを定義している場合、xmlではmergeタグをRootにする。その場合AdapterのgetViewメソッドでinflateメソッドを呼ぶ時に、第三引数にparentを渡さないといけな...ListViewのItemの高さをlayout_heightに設定しても高さが変化しない2015-01-06genymotionからCharles経由でHTTPリクエストを出すAndroidGenymotionで起動したエミュレータのプロキシ設定で、プロキシのホストを10.0.3.2にすればよい。プロキシ設定の手順は以下参照。localhost...genymotionからCharles経由でHTTPリクエストを出す2015-01-05匿名クラス内で親クラスのオブジェクトを参照する方法Androidクラス名.thisを使えばいい。MyFragmentクラス内なら以下のようなコードになる。windowでローカル変数の中身を見られないAndroidテストカバレッジを出力する設定をOFFにすると直った。具体的にはbuild.gradleの以下をコメントアウトした。class」エラーAndroid原因はコンストラクタが足りないこと。下記のコンストラクタは必ず定義しないといけない。space」エラーAndroid原因はメモリ不足っぽい。gradle.propertiesに以下を追加すると直った。activity」エラーAndroid原因はマニフェストにテスト対象のactivityを追加していないことだった。activity」エラー2014-12-29RobolectricとEspressoを同じプロジェクトで併用するAndroid以下リポジトリで併用しているので、これを参考にビルド設定を変更すればいけた。これでロジックのテストもUIのテストもやりまくれるぞーRobolectricとEspressoを同じプロジェクトで併用する2014-12-28genymotionにproxyを設定するAndroid以下記事にgenymotionにproxyを設定する方法が書かれていたので参考にさせて頂きました。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。