2016_01_05週_Parcelable内のwriteとreadの順番他

毎日メモはしてるので土日にまとめて公開することにします。 一週間経つだけでも全然忘れてしまうな…。ブログに公開することで、自分が目に通す回数を増やしたりできればいいな。 良い復習にはなりそう。

JVMJREの違い

聞かれてわからなかった・・・

http://www.mltlab.com/wp/archives/406www.mltlab.com

Dalvikとは

e-words.jp

http://www.wdic.org/w/TECH/Dalvikwww.wdic.org

WebViewのonReceivedErrorが呼ばれない

API 23ではonReceivedErrorの仕様が変わったそう。 でも新しいonReceivedErrorだとネットワークエラー時に呼ばれない。

complieSdkVersionを23にすると非推奨の打ち消し線が入るのでなんでこうなっているのかわからなかった

何が原因なんだろうか、なにかのverな気がする… 結局compileSdkVersionを22に下げても、6.0端末で試してもこの新しいonReceivedErrorは呼ばれなかった

LinearLayoutでparentBottomを表現する

http://ichitcltk.hustle.ne.jp/gudon2/index.php?pageType=file&id=Android055_layout4ichitcltk.hustle.ne.jp

特定のコミットからブランチを切る

qiita.com

デフォルトのDialogを使うのがよくない理由

numalog.relva.org

getFragmentManagerとgetSupportFragmentManager

 getSupportFragmentManager().executePendingTransactions();
        if (getSupportFragmentManager().findFragmentByTag(DatePickerDialogFragment.TAG) != null) {
            return;
        }
        DatePickerDialogFragment.newInstance().show(getSupportFragmentManager(),
                DatePickerDialogFragment.TAG);
                

ダイアログの二重起動での制御について、 findFragmentByTag()がいつもnullで帰ってきてしまう問題。

今回はsupportのDialogFragmentを使ってるので、FragmentManagerを呼ぶ時はサポートの方で呼ばなくては返ってくるFragmentManagerが異なる。

getFragmentManager()getSupportFragmentManager()も呼べるため、なぜ合っていないのか気づきにくかった.

supportlibraryを使ってるのかそうでないのかみたいなところが意外と時間を食われる元な経験が最近多い…

stackoverflow.com

stackoverflow.com

久しぶりにgitでミスった

最近revertとかresetなど多用していてdiffがすごいことになった死にたい

masterとheadのdiffを一覧で見る

git diff master..head --stat

一度pushした後にローカルでresetしたりするとnon-fast-forwardで怒られる

git push origin :hoge

で空をremoteのhogeブランチにプッシュすることになるので、リモートのブランチが消える

git push origin hoge

でもう一度pushすればいい

特定のファイルだけmergeする

qiita.com

文字列のちょっと凝った操作

意外とよく使うけどすぐ忘れちゃう

http://y-anz-m.blogspot.jp/2011/03/android-xml.htmly-anz-m.blogspot.jp

どのタイミングで状態が変わるのかコメントに付け足しておく

void hoge(){
if(mDisable){
    return
}
mDisable = true;
・
・
・

のようなインスタンスフィールドのboolean値などはなるべくインスタンスフィールドに持たない方がよいと言われてるくらいだから、 どの状態で変わるのかはコメントしておいたほうがあとで見た人(自分も含む)が理解しやすそう。

今回は親のクラスで使われている変数だったため、なおさら。

license情報

vividcode.hatenablog.com

  • リリース用のものだけでOK(リリース用apkに含まれるもののみ)
  • テスト用・デバッグ時にしか使ってないもの(loggingのものなど)は表示しなくてよい

AndroidManifest Activityの設定

http://docs.monaca.mobi/cur/ja/reference/reference/config/android_configuration/#manifest-xmldocs.monaca.mobi

自動でlabelがついてくるけど、特になくてもよさそう。ある場合は、lancherの時アプリ名として表示される。 なかったらデフォルトのものが表示される。

Acitivityのデフォルトに入っている値を利用する

知らなかったけど結構、元々用意されているものが多い。自分で定数設定しなくて済むので、いろいろ書き留めておきたい。

ActivityのRESULT_OK ex)Activity.RESULT_OK

MVP設計におけるDtoを持つ場所

Activityにインナークラスで次画面に渡すためのインナークラスを持っていたところ、インターフェースに持つよう指摘された

理由としては、Activity / Fragment に関係なく、View に固有する dto であれば、View のインターフェースの定義するのが望ましいからです。

どこに依存している情報なのか?を考える。

strings内のCDATA内でのエラー

ライセンスページを作ってる際にエラーが出た

d.hatena.ne.jp

インターフェース内の省略範囲

  • インターフェース内に定義した内部クラスにpublic staticは省略できる
  • コンパイルすると自動的に付与してくれる

Parcelable内のwriteとreadの順番

 @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeInt(mUrl);
            dest.writeInt(mTitle);
        }

        public ParamDto() {

        }

        protected ParamDto(Parcel in) {
            mUrl = in.readInt();
            mTitle = in.readInt();
        }

このwriteとreadの順番が逆になっていると変数に入ってくる情報が変わってくる

Linearlayout内にdivider

真ん中だけ動的に区切り線をいれたいが、linearlayoutにviewをaddviewをしても、反映されなかった

qiita.com

dividerというものを設定できるみたいなので、これ便利

./gradlew app depencies

で依存しているライブラリを表示する gradleコマンド

ビルドが通らないソースをコミットしない

当たり前だけど、タイポミスがあったままコミットしてしまった。

javadocのtips

こんなのもある blogs.oracle.com

inflateの引数

inflate()の第三引数の話。 第三引数のboolean attachToRootの値は、falseにしないと第二引数に渡した親viewが返り値として返ってくる。

http://developer.android.com/intl/ja/reference/android/view/LayoutInflater.html#inflate(org.xmlpull.v1.XmlPullParser, android.view.ViewGroup, boolean)developer.android.com

scrollView内のlinearLayout

scrollViewもその中のlinearlayoutいずれもwrap_contentが推奨されている 実際にscrollView内のlinearLayoutにmatchをつけてもmatchにならない

  <style name="TaskDetailButton" parent="@style/Widget.AppCompat.Button.Borderless">

2016_01_04_CursorIndexOutOfBoundsException他

新年。引き続き学んだことの記録を。新年の抱負など冬休みの記録は改めて。

SDK更新後のAndroid studioのエラー

qiita.com

sdk更新したりしてたらエラー出まくって心臓に悪かった。

logcatでエラー

http://www.hangout.co.jp/blog/archives/148www.hangout.co.jp

こんなのが出まくる

dalvikvm﹕ VFY: unable to find class referenced in signature (Landroid/webkit/WebResourceRequest;)

http://theoldmanandthedroid.blogspot.jp/2013/06/fixbug-vfy-unable-to-find-class.htmltheoldmanandthedroid.blogspot.jp

SDK更新するとなったりするみたい。rebuild projectでひとまずはdalvikvmはいなくなった

リモートのコミットを取り消したい

qiita.com

CursorIndexOutOfBoundsException

www.glpgs.com

わかりやすかった。Cursorの性質みたいなのを知ってなきゃいけなかったのかな

Parcelableの話

http://y-anz-m.blogspot.jp/2010/03/androidparcelable.htmly-anz-m.blogspot.jp

AndroidでBorderBottomをつける

いつも忘れてしまう…

http://wada811.blogspot.com/2013/07/android-view-border-bottom.htmlwada811.blogspot.com

GradleのBuildが遅い!

Android Studio の ビルド がやけにトロい
android.benigumo.com

checkboxやradiobuttonのcheck部分を隠す

android:button="@null"

checkboxのcheckのデフォルトのstyleをリセットする。 buttonのデフォルトのstyleをリセットするにはbackground="@null"

scrollViewの下にfooterを置く

画面下部に固定配置
muchag.undo.jp

layout_weight=1をscrollViewに追加すると解決する、なんでや…

2015_12_25AndroidのwebViewでオレオレ証明書に対処する他

毎日会社で新しく学んだこと・調べたことをメモベースで公開することにしました! なんとなく知識が蓄積していないかを可視化するためにも。

build.gradle内のbuildTypesにタスクを作成する

noboru.hatenablog.jp

vividcode.hatenablog.com not fount buildConfig()とか言われたけどな

android webViewの設定

javascriptの設定など

http://y-anz-m.blogspot.jp/2010/07/androidwebview.htmly-anz-m.blogspot.jp

オレオレ証明書の対処法・仕組み

http://y-anz-m.blogspot.jp/2012/08/androidwebview-https.htmly-anz-m.blogspot.jp

開発用のwebViewを表示するためにこういう対処が必要になりました。 この対処法にいきつくまでに、SSLの知識?とか開発用のサーバーがどんな構造になっているかを問題を切り分けて考えることが必要でした。 (つまり時間かかった〜涙)

2015_12_24onDestroyで参照を切るもの他

最近続けている今日学んだことのメモ(調べたこととか、調べて参考にした記事)を公開していきます。 Androidメイン。

onDestroyで参照を切らなきゃいけないもの

  • ポイントは"Activity"への参照が残らないようにするという視点
  • なんでも切れば良いワケじゃないね

Utilクラスに移譲するもの

  • 経験則だが、versionNameを取得するものなどは、Utilクラスに移動することを検討したほうがいい

@Nullableについて

  • 何らかの原因で返り値が null になるケースがあるときは、メソッドに@Nullable アノテーションを付けておく。(例えばtry/catch が必要になっているとか)
  • 何故つけるかというと、もし他の人がこの画面に追加実装することになった場合でも、null が返されるケースがあることを明示的に書いておけば、実装者はそれに気をつけて実装が可能なので、バグ・不具合の発生を抑えれる。

nullが入り得るかどうかでバグにどれだけ繋がるか、その情報をどう伝えるかについて

d.hatena.ne.jp

nullは型を持つかどうかの話(というよりoptionalやmaybe?(使ったことない)の話) bleis-tift.hatenablog.com

TargetSDKversionの話

onlineconsultant.jp

minSdkVersionとTargetSdkVersionの関係

何も考えずに実装していたなぁと実感。 最近出たAPIは確認しておくべきなのかもしれない。

qiita.com

ちなみに今のプロジェクトはminSdkVersion=16,targetSdkVersion=22となっていた

じゃあcompileSdkVersionは? http://assam-at-night.blogspot.jp/2015/05/androidcompilesdkversionbuildtoolsversi.htmlassam-at-night.blogspot.jp

qiita.com

一方compileSdkVersionにはcompileSdkVersion=23になっていたので、targetとcompileがバージョン違うと何がいけないのかな?

Argumentsとは

bundleにsetArguments()するときのキーの値の名前の流れでARGS_HOGEという名前にした方がいいよと指摘を受けて、あれ、argumentsってなんだっけとなった。引数やんけ

その流れで引数とパラメータの違いを説明している記事があったのでメモ。

blog.masahiko.info

Support Libraryについて

minSdkVersionとかTargetSdkやらはわかったけど結局supportLibraryって何が違うんだっけ?となったので改めて。

vividcode.hatenablog.com

2015_12_22AndroidのversionNameを取得する他

Fragmentでsetterを使わない理由

DialogFragmentを実装したため、復習。 わかっているようで、わかっていないような…。ココらへんの話定期的に復習したい。

http://y-anz-m.blogspot.jp/2012/04/androidfragment-setarguments.htmly-anz-m.blogspot.jp

Materialデザインの要素名

qiita.com

photoshopvip.net

上に載ってるコンポーネントのことをなんて名前つけたらいいのかなと

OutOfMemory対策

onDestroyで参照切るお話。 結局何を切るべきで何は切らなくてもよいのか?みたいなところを見ていた

http://htomiyama.blogspot.jp/2012/08/androidoutofmemoryerror.htmlhtomiyama.blogspot.jp

ButterKnifeのunbind

qiita.com

上と関連してFragmentの場合は、onDestroyView()でunbindしようと書いてある。 ソースレビューで指摘されたため何が必要で何が必要じゃないか気になった。

たまに@InjectViewが使われているソースコード見つけて!?となることがあったのでありがたい記事。

AndroidのversionNameを取得する

techbooster.jpn.org

qiita.com

PackageManager manager = ((Context) mAboutThisAppsView).getPackageManager();
            PackageInfo packageInfo = manager.getPackageInfo(
                    ((Context) mAboutThisAppsView).getPackageName(), 0);
            mAboutThisAppsView.initViews(packageInfo.versionName);

AndroidManifestに書いてあるversionNameを取ってくると書いてあったが、 実際にはapp/build.gradleに記述してあるversionNameをとってきているみたい

 defaultConfig {
        applicationId "jp.co.hoge.hogeproject"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0.0"
    }

同じファイルの中でcommitを分けたいとき

qiita.com

git add -pを使うとよい。 自分はtigでaddを管理しているので、オプションがあればもっとコミットログが綺麗になりそう!

結局Contextとは

http://individualmemo.blog104.fc2.com/blog-entry-41.htmlindividualmemo.blog104.fc2.com

毎回わかった気になって毎回わかってなかったてなってる気がする

アプリ全体の情報を統括してる

というイメージ。わかるけど使いこないしてるかわからん

androidではシステムが元々結構resource用意してくれてる

http://developer.android.com/intl/ja/reference/android/R.string.htmldeveloper.android.com

ok cancelなどよく使うものはある。

Dialogの二重起動をどう防ぐか

こういったメソッドが参考になるみたいな fragmentManagerのexecuteを忘れててずっとnullがかえってくるからどうしようかとおもった

stackoverflow.com

ここのをコピペしてきたっぽいものを吟味せずに使ってて指摘された。

http://eggdev.mobaegg.com/2012/08/blog-post_4.htmleggdev.mobaegg.com

2015_12_21Javaのオーバーロード他

毎日情報量が多くて蓄積していない感覚を感じているので何かアウトプットを、と思っているものの、毎日記事を書こうとすると後回しになってしまうので、 毎日参考に見た記事を頭にいれたいものベースでピックアップして載せてみる。 いつまで続くか知らないけど。

Gradleで認証エラー

Error:(1, 0) Cause: unable to find valid certification path to requested target

ameblo.jp

mike-neck.hatenadiary.com

→結局社内でアクセスしていたbuild設定ファイルのしわざでした。ビビる。

ローカルとリモートのブランチ名を変更する

gist.github.com

URLの管理はURI

koseki.hatenablog.com

  • 文字列の比較ではなく、ドメインの比較なども入ってくるとUriで管理しておいた方が後々便利である

github.com

こんなかんじでUri.parseで初期化・定数化しているみたいだった

暗黙的インテント

http://mitoroid.com/category/android/android_implicit_intent.phpmitoroid.com

  • 他のアプリの機能を使ってデータを開く
  • 今回はデータの表示をURLを渡した
  • これはブラウザが開くことになる

Drawableで角丸縁ボタン

qiita.com

strokeとsolid、考えたらわかるんだけど久しぶりにどうするんだっけ、とまた調べてしまった…

Javaオーバーロード

www.javadrive.jp

返り値の型だけが違うだけだとコンパイルエラーになってしまう。

vim

  • ctl+[でエスケープするの癖つけよう

コマンドライン

  • ctl+jでエンターと同じ
  • ctl+aで先頭に戻る
  • ctl+fで進む
  • ctl+bで戻る

javadocについて

qiita.com

javadocも奥が深い。文字だけ書いてるだけじゃなくて色々使いこなせるようになりたい限り…。 <code></code>を使って書くだけでもわかりやすさなど変わりそう…

Androidのguidesやら

何か形になればよいな〜日記的な感じでもよいし。ということで初日終了。

Potatotips(iOS/Android開発Tips共有会)#24に参加しました

ずっと行ってみたいと思っていたpotatotipsにブログまとめ枠として初参加してきました!

ブログまとめ枠て何かすごいこと書かなきゃいけないのでは…!とこわいこわい!でしたが、 エイヤで申し込んで参加してきちゃいました。

概要

  • PotatotipsとはiOS/Android開発Tips共有会です
  • 参加者全員がスピーカーという趣旨(?)らしく、一人5分で結構な人数を回す
  • ビール飲みながらゆるく
  • Tips共有後にはお寿司を食べながら懇親会…!
  • 毎回主催されている会社が違うみたい(今回はGoodPatchさんでした)

詳しくは connpass.com

当日は途中からの参加となったのですがメモしていたところからまとめます

Android

Analytics - event properties-

www.slideshare.net

joaoさん(drivemode) * Google Analytics * appversionで分けて解析 * signボタンが横にしたときにはみ出る * 発見が遅れてコンバージョン下がるのをなくすためにどういうデータを取ればいいのか * facebookのdevice year classがすごいよ(アニメーション出し分けたり)

9patchの異常な仕様

dagezi.github.io

dageziさん(quipper)

  • メンテが面倒くさい
  • エディタ使いにくい、dpiごとに必要
  • バリエーションごとに必要
  • テストが面倒
  • 広がる部分をコードでかける
  • プラグイン作った (作り方気になる!確認したい)

SWIG for Android

www.slideshare.net

橋本さん(goodpatch)

  • SWIGを動かしてみる
  • NDK動かせるようになった(NDK?)
  • soファイル作るのが手間だった
  • jniファイル?
  • nativeコード(C/C++)をJAVAでラップしたもの→何に使う?

RxJava+Retrofit

(資料見つからず…)

nakahara shun さん

  • Reactive Extensions Java
  • リアクティブプログラミング
  • 遅延実行,同期処理と非同期処理で処理をまとめられる
  • RxAndroidもあるよ
  • AndroidScheduler,Handler Scheduler

Is Activity God? - The MVP Architecture-

www.slideshare.net

KENJUさん(Recruit Technologies)

  • AndroidにおけるMVP設計の話
  • MVCと名前が変わっただけ?
  • modelとviewでコミュニケーションがない

リソースの整理整頓

speakerdeck.com

yuichi maekawaさん (Cyber Agent)

  • RejectKaigiのくだり、面白かった
  • drawableのリソースを再利用する
  • 色しか変わらないリソースがたくさんある
  • 明度を変えて色を変える、ColorFilterで色を変える

感想

  • 初めてAndroidの会社外のイベントに参加してみて、やっぱり会社ごとに開発環境・標準って全然違うんだ!(小並感)
  • 自分の知らない開発を知っている皆様スゴイ
  • いろんな視点&いろんな方法が聞けて刺激になった!
  • まだペーペーすぎて発表なんてできないと思ってるけど、いずれこういうところでアウトプットできるようになりたい
  • エイヤ!でブログまとめ枠で行ってよかった。次もまとめ枠でいきたい。