なので、イコライザー等の話を少々...
2015/12/29
2015/12/19
2015/12/16
JUnitで型の異なるListをテストする時に便利なクラスを作ってみた
テストで2つのリストを比較する場合、共通した以下の検証があるかと思います。
- サイズのチェック
- 中身のチェック
- ループ何回目でAssertionErrorが発生したか
型が異なる場合は、中身のチェックの共通化は一筋縄にいかないので、そこだけ呼び出し元で中身を検証するようなクラスを作りました。
使い方例はListVerifierTest.javaの方に記述してます。abstractメソッドで中身のチェックを行います。これで呼び出し元のコードがスッキリできるかと。
ListVerifierTest.javaの29行目を以下のように書き換えてテストを失敗させると
List<Integer> bar = Arrays.asList(3, 8);
以下のようなエラーが出力されます。
java.lang.AssertionError: AssertionError at index: 1 Expected: 8 Actual: Foo{result=7}
参考
2015/12/12
Androidスマートウォッチにインストールされているアプリのバージョンの確認
Runkeeperのサポートに不具合(NullpointerException)直してとTwitterで言ったら、次のバージョンで修正したよと言われたので試してみたらアプリが落ちたので、直ってねーじゃねーかと言うためにスマートウォッチにインストールされてるRunkeeperのバージョンを調べました。
※ちなみに、上記リンクでRunkeeper Support氏の言ってるv5.12はスマホアプリ側のバージョンです。
スマホの場合、アプリのバージョン(Version Name)は、アプリ自体にある設定画面に記載されているか、下図のようにOSの設定に記載されています。
スマートウォッチ(ro.build.version.release=5.1.1)では、このようなアプリ一覧がありません(たぶん)
下記のコマンドの手順でバージョンを取得します。大まかに言うとapkファイルのAndroidManifest.xmlを調べます。
※ちなみに、上記リンクでRunkeeper Support氏の言ってるv5.12はスマホアプリ側のバージョンです。
スマホの場合、アプリのバージョン(Version Name)は、アプリ自体にある設定画面に記載されているか、下図のようにOSの設定に記載されています。
スマートウォッチ(ro.build.version.release=5.1.1)では、このようなアプリ一覧がありません(たぶん)
下記のコマンドの手順でバージョンを取得します。大まかに言うとapkファイルのAndroidManifest.xmlを調べます。
2015/12/06
2015/11/15
[Fixed]Runkeeper is terminated abnormally on a stand-alone Sony Smart Watch 3.
Dear Android Wear developer at Runkeeper.
I always start the Runkeeper, leaving the smartphone in my hourse, run wearing only Sony Smart Watch 3.
When returning home after running, I synchronize the smartphone and Sony Smart Watch 3.
Previously it was working.
When the version of this screen,
The app was not terminated abnormally.
Even if I ran about 20 km, the app did not crash on the watch.
Even if I ran about 20 km, the app did not crash on the watch.
Now
Recently become such the screen.In this version, when I run about 2-3 km or 20-30 minutes, Runkeeper is terminated abnormally every time.
ADB Logcat
I tried to connect the PC and the watch with USB. It had been displayed as follows on the ADB logcat:11-15 14:16:51.122: D/AndroidRuntime(7917): Shutting down VM 11-15 14:16:51.122: D/AndroidRuntime(7917): --------- beginning of crash 11-15 14:16:51.168: E/AndroidRuntime(7917): FATAL EXCEPTION: main 11-15 14:16:51.168: E/AndroidRuntime(7917): Process: com.fitnesskeeper.runkeeper.pro, PID: 7917 11-15 14:16:51.168: E/AndroidRuntime(7917): java.lang.NullPointerException: Attempt to invoke virtual method 'double com.fitnesskeeper.runkeeper.core.model.BaseTripPoint.getTimeIntervalAtPoint()' on a null object reference 11-15 14:16:51.168: E/AndroidRuntime(7917): at com.fitnesskeeper.runkeeper.core.filter.NegativeTimeFilter.apply(NegativeTimeFilter.java:17) 11-15 14:16:51.168: E/AndroidRuntime(7917): at com.fitnesskeeper.runkeeper.pro.services.RunKeeperTrackingService.onLocationChanged(RunKeeperTrackingService.java:192) 11-15 14:16:51.168: E/AndroidRuntime(7917): at com.google.android.gms.internal.bg$a.handleMessage(Unknown Source) 11-15 14:16:51.168: E/AndroidRuntime(7917): at android.os.Handler.dispatchMessage(Handler.java:102) 11-15 14:16:51.168: E/AndroidRuntime(7917): at android.os.Looper.loop(Looper.java:135) 11-15 14:16:51.168: E/AndroidRuntime(7917): at android.app.ActivityThread.main(ActivityThread.java:5254) 11-15 14:16:51.168: E/AndroidRuntime(7917): at java.lang.reflect.Method.invoke(Native Method) 11-15 14:16:51.168: E/AndroidRuntime(7917): at java.lang.reflect.Method.invoke(Method.java:372) 11-15 14:16:51.168: E/AndroidRuntime(7917): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 11-15 14:16:51.168: E/AndroidRuntime(7917): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
NullPointerException!!!
Please fix it
I'm going to run the first full marathon next year. This is my only hope. Pleaseeeeee!※この記事はTwitterでの問い合わせ用に書きました
@RKSupport Hello. Runkeeper crash on a stand-alone SonySmartWatch3. Please fix. For more info I wrote in the blog: https://t.co/6lDHwWBoOD
— たかいわ (@takaiwa29) 2015, 11月 15
2015/11/17
@takaiwa29 Thanks for letting us know about this! It should be fixed in our next release, v5.12.
— Runkeeper Support (@RKSupport) 2015, 11月 16
2015/12/28
@RKSupport Thank you!! The crash has been fixed in v6.0.2.
— たかいわ (@takaiwa29) 2015, 12月 28
2015/10/09
2015/09/30
2015/09/22
Applicationを参照するActivity起動のテストをしたい。あるいは、Activityの結合テスト
Applicationとはandroid.app.Applicationのことで、これを継承したクラスをマニフェストに定義しておくと、Activity内でgetApplication()で取得できます。
Activity1でApplicationを継承したクラス内のフィールドに値をセットして、Activity2でその値を参照するといったことができます。Applicationはアプリが起動している間は保持されるので、いろいろ使えるわけですが、その値を利用して、Activity起動時に分岐するような処理を入れている場合のテストを考えます。
Activity1でApplicationを継承したクラス内のフィールドに値をセットして、Activity2でその値を参照するといったことができます。Applicationはアプリが起動している間は保持されるので、いろいろ使えるわけですが、その値を利用して、Activity起動時に分岐するような処理を入れている場合のテストを考えます。
2015/09/21
【解決しました】Sony Smart Watch 3が使い始められない!!
スマートウォッチのアプリを作ってみようとAmazonでSony Smart Watch 3を購入しました。Sony Smart Watch 3を選んだ理由は、GPSが付いておりRunkeeperというランニングを記録するアプリを単体でスマートウォッチ上で動かせるという記事を見たからです。
結論から言うとまだ使い始められてませんし、解決策もわかりません。とりあえず試してみた事などをダラダラ書いておきます。進展があり次第追記します。
2015/09/24:使えるようになりました。下の方に追記しています。
まず、スマートウォッチにUSBのコネクタを繋げて30分充電。次にセットアップ作業に取りかかりました。Android 4.3以上のスマートフォン/タブレットが必要とのことで、2012年版Nexus 7にAndroid 5.1.1が入ってるので、これにGoogle PlayからAndroid Wearをインストール。Android Wearを起動してスマートウォッチとBluetoothでペアリングすると、ダウンロード処理が開始されました。
時間かかりそうだったので、しばらくしてから見てみるとエラーダイアログが表示されてしまいました。エラーダイアログは以下の3つ。
2015/09/24:使えるようになりました。下の方に追記しています。
まず、スマートウォッチにUSBのコネクタを繋げて30分充電。次にセットアップ作業に取りかかりました。Android 4.3以上のスマートフォン/タブレットが必要とのことで、2012年版Nexus 7にAndroid 5.1.1が入ってるので、これにGoogle PlayからAndroid Wearをインストール。Android Wearを起動してスマートウォッチとBluetoothでペアリングすると、ダウンロード処理が開始されました。
時間かかりそうだったので、しばらくしてから見てみるとエラーダイアログが表示されてしまいました。エラーダイアログは以下の3つ。
- 問題が発生したため、Google Play開発者サービスを終了します。
- 問題が発生したため、Android Wearを終了します。
- 問題が発生したため、プロセス「com.google.process.gapps」を終了します。
2015/09/12
2015/09/10
2015/08/27
FragmentStatePagerAdapterにセットしたFragmentの参照
ViewPagerにセットするアダプターをFragmentStatePagerAdapterを継承したクラスで実装する場合、そのクラスにセットしたFragmentを参照するには、StackOverflowで以下のように内部にリストなりマップなりで持つみたいなコードを見かけました。
※このコードは動作を確認してません。だいたいこんなイメージということで
外部からこのAdapter経由でSubFragmentを参照したい場合、getItemを呼ぶなり別にメソッドを設けてfragmentsを参照するなりという方法が紹介されてました。リンクは忘れました。
でも、これだと、端末回転時やActivityが後ろに回って破棄されるような場合に、fragmentsが空っぽになってしまい参照できません。(維持する方法もあるんでしょうけど....)なんで空っぽかと言うと、端末が回転した時はgetItem()メソッドが呼ばれません。
と、少し悩んでいたのですが、別にそんなことをしなくてもFragmentStatePagerAdapterの以下のメソッドを呼べば参照することができます。
public Object instantiateItem(ViewGroup container, int position)
containerにはViewPagerを入れておけばいいと思います。
まあ、よくドキュメントを読めということですね....
関連:ViewPager + FragmentStatePagerAdapter画面回転時等のメモ
※このコードは動作を確認してません。だいたいこんなイメージということで
外部からこのAdapter経由でSubFragmentを参照したい場合、getItemを呼ぶなり別にメソッドを設けてfragmentsを参照するなりという方法が紹介されてました。リンクは忘れました。
でも、これだと、端末回転時やActivityが後ろに回って破棄されるような場合に、fragmentsが空っぽになってしまい参照できません。(維持する方法もあるんでしょうけど....)なんで空っぽかと言うと、端末が回転した時はgetItem()メソッドが呼ばれません。
と、少し悩んでいたのですが、別にそんなことをしなくてもFragmentStatePagerAdapterの以下のメソッドを呼べば参照することができます。
public Object instantiateItem(ViewGroup container, int position)
containerにはViewPagerを入れておけばいいと思います。
まあ、よくドキュメントを読めということですね....
関連:ViewPager + FragmentStatePagerAdapter画面回転時等のメモ
2015/07/05
Emacsキーバインドとアプリケーションショートカットキーを併用
プログラミングをしながらの上下左右キーはキーボードのホームポジションを離れることもさることなら、手首を折り曲げて操作するので、最近つらいです。
2016/03/09:記事を修正しました。
Windows10アップグレード後の挙動の記載と紛らわしい不要な情報を削除などしました。
最近上下キーが辛いのでキーバインドを変更しようか.../"Emacsのショートカットキー(キーバインド)を設定したらタイピング速度めっちゃ上がったから全力でオススメするわ今! | jMatsuzaki": http://t.co/sjdTCoLUXp
— たかいわ (@takaiwa29) 2015, 7月 4
そういう思いで検索してたら上記のリンクの記事を見つけました。これなら手首を酷使する事もないだろうと。2016/03/09:記事を修正しました。
Windows10アップグレード後の挙動の記載と紛らわしい不要な情報を削除などしました。
2015/05/22
Android画面回転後にActionBarが消える問題
確認した環境
- 端末のOS
- Android 4.0.4
- Android 5.1.1
- targetSdkVersion:22
- Android Support Library:22.1.1
- Activity:AppCompatActivity
- Fragment:android.support.v4.app.Fragment
サンプル
ActionBarに今月を表示する簡単なものです。
この画面で端末を倒すと、
2015/05/17
2015/05/15
2015/05/10
Android StudioでサクサクTDDできない!
まだ移行してなかった
2014年12月にAndroid Studio 1.0がリリースされて、年末にAndroid Studioへ移行しようと思ってましたが、EclipseのようにJUnitでサクサクテストするやり方がわからなかったので引き続きEclipseを使ってました。サクサクテストというのは、Run as > JUnit Test > Android JUnit Test Launcherで起動するJUnitテストです。2015/05/09
2015/05/06
DroidKaigi (2015/4/25) 資料とかメモ
個人的なメモや感想です。まだ全部に目を通しきれてないです...
公式サイト:http://droidkaigi.github.io/
※マテリアルデザインなサイトですね。
twitter:https://twitter.com/DroidKaigi
facebook:https://www.facebook.com/DroidKaigi
togetter:http://togetter.com/li/812559
カンファレンスアプリ:https://play.google.com/store/apps/details?id=com.droidkaigi.conference2015s
公式サイト:http://droidkaigi.github.io/
※マテリアルデザインなサイトですね。
twitter:https://twitter.com/DroidKaigi
facebook:https://www.facebook.com/DroidKaigi
togetter:http://togetter.com/li/812559
カンファレンスアプリ:https://play.google.com/store/apps/details?id=com.droidkaigi.conference2015s
2015/05/02
note linkerバージョン1.2をリリースしました
今回の対応内容は以下の通りです。
- ノートブックおよびタグの絞り込み機能
- 目次ビューワーの高速化
- 目次作成処理の高速化
- 細かいバグの修正
特に目次ビューワーはバージョン1.1までボロボロで、画像などがあるとかなり表示が遅くなってたかと思います。またはアプリが落ちてたかと...
画像表示部分を大幅に見直したため表示スピードがかなり速くなってます。そのため画像を含む目次の閲覧がスムーズに行えるかと思います。
また、目次作成のスピードも改善しました。
ダウンロードはこちらから
2015/04/19
2015/02/28
Androidのマテリアルデザインのサンプルを試したメモ1
こちらの記事を参考に試してみました。
- Android アプリにマテリアル デザインを導入する - Google Developer Japan Blog
http://googledevjp.blogspot.jp/2014/11/android.html
導入に関してはこちらを参考に
- 既存のAndroidアプリにMaterial Themeを適用する方法 - Firespeed
http://firespeed.org/diary.php?diary=kenz-1790
環境
- targetSdkVersion:21
- 実行環境:androVM_vbox86p_4.1.1_r6.1-20130222-gapps-houndini-flash_1
- IDE:Eclipse 4.3.2
- AppCompat v7:リビジョン番号不明 → 21.0.3
2015/02/13
2015/01/19
androidのショートカットとウィジェットまわりのメモ
ショートカット作成
アプリ上の操作でショートカットを作成
Androidのサンプルソースcom.example.android.apis.app.LauncherShortcutsのsetupShortcutメソッドが参考になると思います。起動するActivitiyは
shortcutIntent.setClassName(this, this.getClass().getName());このコードは自分自身を起動するようにしてます。
何かキーと一緒に作成する場合は
shortcutIntent.putExtra(EXTRA_KEY, "ApiDemos Provided This Shortcut");の所に設定すればいいと思います。これを起動したActivityのonCreate()で
String extra = intent.getStringExtra(EXTRA_KEY);のように取得できます。
2015/01/12
Mockitoを使ってActivityの分岐のテスト
テスト内容
テストはActivityUnitTestCaseで行います。この時、画面遷移の分岐をonCreateでやるか、onStartでやるかで変ってくるので、その2つについてサンプルを作成しました。
登録:
投稿
(
Atom
)