日々精進

新しく学んだことを書き留めていきます

2015-03-01から1ヶ月間の記事一覧

potatotips#16発表資料(CustomViewTips)

potatotips#16に参加してきました。 発表資料は↓ http://hosokawa0825.github.io/slides/CustomViewTips/#/

build.gradleに「options.encoding = 'UTF-8'」を定義してもWindowsで文字化けする

build.gradleに以下を書いて文字コードをUTF8にしていたが、Robolectricでテスト実行時にテキストファイルを読み込むと文字化けするという現象が起きた。これはWindowsでのみ発生しMacでは文字化けしない。 tasks.withType(JavaCompile) { options.encoding …

Android Studioからビルドすると「Error:Android Gradle Build Target: org.gradle.tooling.GradleConnectionException: Could not execute build using Gradle installation」エラーはclean projectで直る

以下の記事でこのエラーは~/.gradleを削除すると直ると書いたが、メニューのBuild>Clean Projectを実行すると直るっぽい。 2015-03-10 - 日々精進 こっちの方が手間が少なくていいな。

一つのlayout xmlを複数includeした時にViewへの参照を取得する方法

parent.xmlにchild.xmlを複数回includeした場合、同じidのViewが複数できるがそれらへの参照をどうやって取得するか。例は以下。 parent.xml <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> </scrollview>

BRタグに一致する正規表現

IT

BRタグが入ったメッセージがくるのでAndroid側で改行コードに変換するといういけてない仕様に対応するためBRタグに一致する正規表現を書いた。 以下で一致するはず。 <[Bb][Rr](\s+\/)?>

BundleのValueをすべて見る

デバッグ中にBundleの中身を見たい・・・という場合があるが デバッグウィンドウでbundle#mMapを見てもなぜか例外が発生して見れない。 BundleのkeyはBundle#keySet()で一覧を取得できる。 valueはBundle#getから取得するしかないっぽい。 見づらいけどBundl…

AmazonLinuxにmailコマンドが無い

aws

デフォルトではmailコマンドが実行できないっぽい。 以下を実行してパッケージをインストールすれば実行できるようになる。 sudo yum install mailx 参考: Missing mail command on Amazon’s Linux « That's Geeky

Bundle経由でFragmentにオブジェクトを渡すと参照渡しになる

FragmentAからFragmentBインスタンスを生成するときにBundleにオブジェクトを詰めて渡した場合、一旦SerializeされてFragmentB側でインスタンスが生成されるものだと思っていたが違うらしい。実際は参照が渡されるだけ。 ただし、OSにprocessをkillされた後…

CustomViewのlayout xmlにmergeタグを使うとレイアウトが崩れる問題

状況は以下 CustomView(名前はPositionView_)のlayout xmlのRootタグはmergeタグ <merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" > ... </merge> Fragmen…

gitで間違ったBranchにPushすることを防ぐ

git

push.defaultをsimpleにするとローカルとリモートのbranch名が一致する場合のみPushするようになるので事故が減って良い。 以下のコマンドで設定できる。 git config --global push.default simple 参考: git の push.default 設定を理解する - Qiita

文字列をBigDecimalに変換する時に、変換出来ない場合nullにする

文字列をtry parseしてparse出来る場合だけBigDecimalに変換したいという場合。 NumberFormatExceptionをcatchして握りつぶせば良い。 try { rate.setDecimal(new BigDecimal(json.getJSONArray(2).getString(0))); } catch (NumberFormatException e) { // …

AndroidStudioのdebug windowのオブジェクト詳細について

debug windowのvariablesやwatchesには以下のようにオブジェクトが表示される。 jp.co.sample.common.NumberPicker{43becbd V.E..... ......I. 0,0-0,0 #7f09007f app:id/rate_number_picker} この例の43becbdはhashCode、#7f09007fはandroid:idの値。 16進…

Magic Mouseの接続が頻繁に切れる問題を解決する

mac

ちょっとした衝撃でもMagic Mouseの接続が切れるので困っていたが、 以下の対策で直った。 ちょっと厚めの紙を二つ折りにして電池ボックスの電池と電池の間に挟む。 電池ボックスのフタを若干曲げてフタが電池を押さえつけるようにする(この表現で伝わるだ…

Android Studioのビルドが途中で止まる

Android Studioをリスタートしても、マシンを再起動してもだめという場合は、メニューの File>Invalidate Caches / Restart...を選択し、Invalidate and Restartをクリックすると直るかも。 最近Android Studioのビルドが不安定で困る。。

「java.lang.NullPointerException: Attempt to write to field 'int android.support.v4.app.Fragment.mNextAnim' on a null object reference」エラー

原因は、fragmentをremoveすると、一瞬mFragmentManager.getFragments()で取得出来るListの要素にnullがある状態になるため。 以下のコードだとfragmentをaddしたりremoveしたりを繰り返すとNPEで落ちることがある。 for (Fragment fragment : mFragmentMana…

selectorリソースを使ってボタンの背景画像を切り替えられない

原因は、XMLファイル内の一番上にAttributeが付いていないitemを書いていたため。 selectorは上から順に評価されるので、常に一番上の画像を表示してしまっていた。 以下はだめな例。 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/common_sell_radio_button"/> </item></selector>

Mac上のProvisioning Profileが保存されているフォルダのパス

iOS

これたまに必要になるけどいつも忘れる。以下パスに保存されている。 ~/Library/MobileDevice/Provisioning Profiles 参考: Find provisioning profile in Xcode 5

AppCodeからアプリを実機で動かそうとすると、「failed installing application, reason: Error Domain=JBDeviceKitErrprDomain」エラー

iOS

XCodeからは動かせるのになぜ。。 下記サイトではcleanビルドするか、Resourcesフォルダの設定を直せば直るよと書いてあるが、cleanビルドしてもだめだしResourcesフォルダは普通に動いていた時から触ってない。。 結局XCodeから実行してしのいだ。 参考: i…

XCodeを実機上で動いているプロセスにアタッチできない

iOS

XCodeのメニューのDebug -> Attach to Process -> By Process Identifier (PID) or Name... からアタッチ出来そうだが、出来なかった。。やったことは以下。 メニューに実機で動いているアプリ名の一覧が出るのでそれを選んでも「Connection Lost...」という…

@hideアノテーション付きメソッドはリフレクションを使うと呼び出せる

@hideアノテーションJavadocコメントに付いているメソッドは参照出来なくなるっぽい? 少なくともActivity#isResumedは呼び出そうとしてもビルドエラーになる。 が、リフレクションを使うと呼び出せる。そんな無理矢理アクセスしてたらSDKの内部実装が変わっ…

1,000のようなカンマつきの文字列をBigDecimalに変換する

DecimalFormatを使う。setParseBigDecimal(true)でparseメソッドがBigDecimalを返すようになる。 DecimalFormat decimalFormat = new DecimalFormat(); decimalFormat.setParseBigDecimal(true); BigDecimal d = (BigDecimal) decimalFormat.parse(string); …

Android Studioからビルドすると「Error:Android Gradle Build Target: org.gradle.tooling.GradleConnectionException: Could not execute build using Gradle installation」エラー

原因は謎だが、~/.gradleフォルダを削除してgradleを再インストールすると直った。 Android Studio不安定で困る。。 参考: Gradle error: could not execute build using gradle distribution

選択中のタブがクリックされたイベントを検知する

TabHostインスタンス生成時に以下を実行すればよい。 // hostはTabHost型のフィールド変数 TabWidget tabWidget = host.getTabWidget(); for (int i = 0; i < host.getTabWidget().getTabCount(); i++) { View tab = tabWidget.getChildAt(i); tab.setOnTouc…

SerializableとParcelableの使い分け基準

それぞれの特徴は以下。 Serializable Serializeロジックを自分で実装しなくて良いので楽。Serializeしたくないフィールドにはtransientを付ける。 Parcelable アプリ間でデータをやりとりすることができる ロジックを自分で書かないといけないので面倒。joh…

Robolectricのテストを実行すると「ERROR: transport error 202: connect failed: Connection refused」エラー

Debugではこのエラーが出るが、Runだと出ない サーバに接続できないとこのようなエラーが出るという報告が以下の記事であるが、サーバには接続できている Can't debugging JUnit + Roboloctric test in Android Studino with gradle gradlew buildを実行して…

UIPopoverController#contentViewControllerに代入できない。

iOS

UIPopoverController#contentViewControllerに代入できなくて、再表示時にcontentViewControllerのインスタンスを変更している箇所で不具合が発生した。 原因はSDK8より、UIPopoverController#contentViewControllerが変更不可能になっていることっぽい。(再…

HOME画面のアプリアイコンをタップして起動すると必ず起動画面に戻ってしまう現象

説明しづらいけど、現象は以下。 HOME画面のアイコンをタップしてアプリを起動する アプリ使用中にHOMEボタンをタップしてアプリをバックグラウンドに送る HOME画面のアイコンをタップして再度アプリをフォアグラウンドにする 起動画面が表示されてしまう(…

Androidでビルドすると「error: No resource identifier found for attribute 'maxValue' in package」エラー

原因はビルドの中間成果物が残っていたことだった。 ./gradlew cleanを実行したら直った。

AndroidAnnotationsとIcepickは一緒に使えない

理由は以下。 Icepickはビルド時にクラス名にsuffixを付ける。(classファイルの中を調べるとクラス名が変わっている) AndroidAnnotationsはサブクラスを生成する。そのクラスにはsuffixが付いていない。 IcepickはSuffixが付いているクラスのみRestore/Sav…

Dialogを下寄せで画面幅いっぱいに表示する

Dialogを表示すると通常は上下左右とも真ん中寄せになるが、下寄せで幅は画面いっぱいにしたい場合は以下のコードをDialogFragmentのサブクラスに実装すればよい。 @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityC…