タグ別アーカイブ: Android

AndroidStudio付属のエミュレータを日本語化する

AndroidStudioのエミュレータを日本語にしてテストする必要があったので、その時の手順をメモ
なお、今回日本語化したエミュレータはOreo(API Level 27)です。
続きを読む AndroidStudio付属のエミュレータを日本語化する

Javaで文字列に漢字が含まれているか判定する

自作Androidアプリで「文字列内に漢字があるかどうか」を判定する必要があった。
意外な正規表現で漢字の判定ができることを知ったので備忘録として残す。

続きを読む Javaで文字列に漢字が含まれているか判定する

Android Studio3系でJava8の機能を使いたい

自作AndroidアプリTwitMorseの改修でJava8の機能を使いたいと思った。
続きを読む Android Studio3系でJava8の機能を使いたい

個人開発Androidアプリのgradleのバージョンを2.3.1から3.1.2へのアップデート対応記録

個人学習がてらに公開しているAndroidアプリ TwitMorse のgradle3系対応を行ったのでその時の対応を記す。

続きを読む 個人開発Androidアプリのgradleのバージョンを2.3.1から3.1.2へのアップデート対応記録

【Android】AndroidNetworkInfoGetter【開発支援ツール】

久々にgithub.comに何かpushしたくなったので昔作った開発支援ツールを改修しました。
いろいろ放置していたのもあって、結構カオスな状態だったのですがJavaScriptの復習がてらに改修しました。

その名も

AndroidNetworkInfoGetter

node.js製で、今のところしょぼいWebアプリですが開発した当初はこいつにすごい助けられたのを覚えています。

https://camo.githubusercontent.com/c647106fa077116e5ca476ea4f9f9b6ba87b4485/687474703a2f2f74616b656c61622e7375622e6a702f77702d636f6e74656e742f75706c6f6164732f2545332538322542392545332538322541462545332538332541412545332538332542432545332538332542332545332538322542372545332538332541372545332538332538332545332538332538382d323031372d30392d31372d31302e33322e32392e706e67

画面こんな感じです。

https://github.com/shotakeu/AndroidNetworkInfoGetter

実は昔githubに公開してそのまま放置していたという。。。



続きを読む 【Android】AndroidNetworkInfoGetter【開発支援ツール】

TwitMorseのつぶやき詳細画面のレイアウトを調整しただけ

Androidアプリ「TwitMorse」version1.6.1をリリースしました。

こんにちは。絶賛就職活動中の元社畜です。

先日とあるWeb系の会社の最終選考で、Twitterアカウントばれして、

「Twitter名、『ハイパーポエムクリエイター』さん、なんですね、何か唄ってみてください」

と言われ、

突然のことで頭が真っ白になってしまってシドロモドロになったので、もう就職活動が嫌になってきています。

続きを読む Androidアプリ「TwitMorse」version1.6.1をリリースしました。

TwitMorse ver1.5.8 リリースしました

ver1.5.7で発生していたクラッシュの緊急対応を行いました

投稿画面を開くとクラッシュする不具合が発生していました。
ご迷惑をおかけしました。

https://play.google.com/store/apps/details?id=jp.sub.takelab.twitmorus

続きを読む TwitMorse ver1.5.8 リリースしました

自分の開発したAndroidアプリにApp Indexingを導入してみた話

最近”App Indexing(アップインデックシング)”というのが流行っているらしく、仕事でもAppIndexing案件に携わるようになった。
しかし、実のところ、自分でもAppIndexingがなんなのかよく分かっていない。
この度プライベートで開発しているAndroidアプリ「TwitMorse」に導入してその効果を検証してみることにする。

続きを読む 自分の開発したAndroidアプリにApp Indexingを導入してみた話

有給を失った社畜が2015年を振り返ってみた

最近このブログを書いていないので、2015年の振り返りをしたいと思います。

続きを読む 有給を失った社畜が2015年を振り返ってみた

Android ActionBarを画面下に表示する方法

何がしたかったか

Before

Screenshot_2015-09-14-11-46-38

After

Screenshot_2015-09-14-11-45-11
ひとつメニューにアイコンを設置するので、ActionBarを画面の下に表示させたかった。例えばTwiccaのようなUIにしたかったのです。

その方法

方法はプログラムを書くかとおもいきや意外とmanifestファイルの編集で終わりました。

AndroidManifest.xml

<activity
            android:name=".MentionsActivity"
            android:uiOptions="splitActionBarWhenNarrow"/>

アクションバーを下に持って行きたいActivityに

android:uiOptions="splitActionBarWhenNarrow"

を追記するだけです。

多分プログラムから制御する方法もあると思うのですが、この方法が一番早かった。


Android ArrayAdapterからstartActivityする方法

AndroidのListViewでは独自のAdapterを作ってListViewにセットすることができます。
今回、独自のAdapterを作ってその中からあるアイコンをタップした時に別画面へ遷移させる方法がわからなかったので調べてみました。

続きを読む Android ArrayAdapterからstartActivityする方法

androidbootstrap

AndroidBootstrapがアツい!と俺の中で話題に

「アプリのデザイン、誰かやってくれないかなー」と思っている個人開発者は結構多いはず。
私も「デザインができる人と友達になりたい」などと他力本願な思考が頭の中を占めていました。

続きを読む AndroidBootstrapがアツい!と俺の中で話題に

Your content must have a ListView whose id attribute is ‘android.R.id.list’ の罠

3連休、日がな一日を個人開発のアプリブラッシュアップに使っている私です。
公開しているAndroidアプリ、TwitMorseにSwipeRefreshLayout(リストを指で引っ張ると更新するやつ)を加えようと、がんばって何度もNullPointerExceptionにはまったりしていました。
今日はエラーログからある問題を解決したのでメモします。 続きを読む Your content must have a ListView whose id attribute is ‘android.R.id.list’ の罠

Java .equalsメソッドの罠

Javaの.equalsメソッドの罠にひっかかって2週間くらいなやんだのでメモります。
開発してるTwitMorseの逆変換機能の実装の時に直面しました。

equalsメソッドは時折同じ文字列の比較をしてもfalseを返すことがあります。

私が引っかかったコード

protected String convertMorseToText(String text) { 
     String[] morse = text.split(" ", 0);
     for (String moji : morse) { 
     if (moji.equals("--・--")) { 
         convertText += moji.replaceAll("--・--", "ア"); 
     } 
     return convertText; 
}

何をしたかったかというと、
textで入ってきたモールス信号を全角空白で分割し、”ーー・ーー”という文字列があった場合に「ア」に変換して返す
というものでした。

if (moji.equals("--・--")) {

しかし、この一文はfalseとなりスルーされてしまいます。何度”ーー・ーー”を入力しても一致しないものとして処理されていました。
これに2、3週間悩みました。

デバッガで調べていたところどこでfalseになっていたかというと、
Stringクラスのequalsメソッドのある部分でfalseが返されていました。

    @Override public boolean equals(Object other) {
        if (other == this) {
          return true;
        }
        if (other instanceof String) {
            String s = (String)other;
            int count = this.count;
            if (s.count != count) {
                return false;
            }
            // TODO: we want to avoid many boundchecks in the loop below
            // for long Strings until we have array equality intrinsic.
            // Bad benchmarks just push .equals without first getting a
            // hashCode hit (unlike real world use in a Hashtable). Filter
            // out these long strings here. When we get the array equality
            // intrinsic then remove this use of hashCode.
            if (hashCode() != s.hashCode()) {// ここにひっかかる
                return false;
            }

どうもhashCodeの違いでequalsを使っても一致しなかったらしい。

そこで以下のように書き換えてみたところうまく機能した。

protected String convertMorseToText(String text) { 
     String[] morse = text.split(" ", 0);
     for (String moji : morse) { 
     String enc = new String(moji);
     if (enc.equals("--・--")) { 
         convertText += enc.replaceAll("--・--", "ア"); 
     } 
     return convertText; 
}

入力されたtextを全角空白で分割する所までは一緒。
違いは、新しくencという文字列をmojiを使って生成して比較するという部分でした。
これでhashCodeの違いを解消できました。

equalsメソッドをオーバーライドしたりhashCodeメソッドをオーバーライドしたりという解決方法もあるにはあったのですが、自分はこの方法でequalsメソッドの罠を回避しました。

後学のためにメモとして残しておきます。

R.array.listの書き方と用途メモ

以下のようなコードでR.array.listを見かけて作り方がわからなかったのでも私的メモを残す
[java]
// ListViewにデータをセットする
ArrayAdapter<charsequence> adapter = ArrayAdapter.createFromResource(self, R.array.list, android.R.layout.simple_list_item_1);
[/java]
続きを読む R.array.listの書き方と用途メモ