2011年11月10日木曜日

androidのADT14からはswitch文が利用できなくなっている

androidのADT14からはswitch文が利用できなくなっています。コンパイルをしようとすると、コンパイルエラーで赤くなります。 なので以下のようなコードがある場合は、変更しないといけません。


       switch (item.getItemId()) {
         case R.id.menu_top:
          intent = new Intent(Constants.INTENT_ACTION_TOP);
          startActivity(intent);
             return true;
         case R.id.menu_help:
       intent = new Intent(Constants.INTENT_ACTION_HELP);
 
上記のコードは、メニューなどの分岐で頻繁に使われる文法ですが、以下のように修正が必要になります。

     int id = item.getItemId();
     if (id == R.id.menu_top) {
         intent = new Intent(Constants.INTENT_ACTION_TOP);
         startActivity(intent);
            return true;
     } else if (id == R.id.menu_help) {
         intent = new Intent(Constants.INTENT_ACTION_HELP);
 

この変更は、android4.0から仕様が変更されたのが原因のようです。自動生成されるRファイルの定数がfinalでなくなったためです。 Eclipseを使っている場合は、「command + 1」で自動的にリファクタリングで修正できます。

android4.0以降での挙動が怖いので、既存プロジェクトも修正したほうがよいかもしれないですね。なので、自動リファクタリングを使ってさっさと直してしまうのがベストだと思います。

参考サイト:http://tools.android.com/tips/non-constant-fields

(以上の記事は私が管理人をやっているfaceBookのページにも記述してあります。)

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2011年11月4日金曜日

半年ぶりにandroidアプリをリリース

半年ぶりにandroidアプリをリリースしました。

記憶の王様というアプリです。

この記憶の王様アプリは、記憶作業を効率的におこなえるようにする補助ツールアプリです。
このアプリでは、エビングハウスの忘却曲線をつかった日付計算が自動におこなわれます。
なので、無駄なく記憶作業に徹することができます。
科学的で効率的な記憶作業は、受験勉強、資格勉強、語学勉強等で大きな助けとなるはずです。

特に語学勉強の単語の暗記や、長期的な記憶が要求される難関試験でとても役立ちます。

以下のQRコードからアプリのダウンロード画面に直接遷移できます。

Android Marketへのリンクはこちらです。

このアプリでは、ActionBarSherlockやquickActionなどのツール、compativityのFragmentやFlick可能なPageAdapter等を使用しています。
androidのターゲットOSversionは2.1ですが、3.2相応の動きになっています。
今後、あらゆる端末がIceCreamに変わるまでは、こういった作り方が中心になる気がします。
実際、googleの純正アプリやシリコンバレー企業のアプリは、上記のツールで作られていると考えて間違いないです。
なので、技術的な解説も今後色々としていけたらと思っています。
さてさて、完全に夜があけたので寝ます。
おやすみなさいzzzzzz。

アプリ画像

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

Android Marketでapkファイルupdateエラー

Android Marketに作成したapkをアップしようとしたら、以下のようなエラーが発生しました。


The file is invalid: W/ResourceType( 1219): Failure getting entry
for 0x7f040000 (t=3 e=0) in package 0 (error -75) ERROR getting
'android:label' attribute: attribute is not a string value

ググって調べてみても、原因がいまいちはっきりしなかったのですが、これまでの開発経験からXMLに問題があることは予想がついたので調査しました。
で、突き詰めて調べたところ、原因が無事判明。

原因は、res/values/string.xmlに記述された属性データと、res/values-ja/string.xmlに記述された属性データが異なっていたからでした。

要は、日本語ファイルと英語ファイルで、属性の有無に差があったということです。
そもそもの原因は、アップデートするapkファイルのversionでは英語対応をするつもりはなく、英語版はstring.xmlファイルだけ用意しておこうと考えたことでした。
アプリで英語対応をするなら、日本語のstring.xmlと同じ属性を、英語のstring.xmlファイルにも全て記述しないといけません。
本来であれば、string.xmlが記述されていない箇所でアプリが落ちて終了。なのですが、AndroidManifest.xmlで指定してあるstring.xmlの属性データが一致していないと、AndroidMarketにupdate出来なくなる仕様にAndroid Marketはなっているようです。
気をつけてほしいのは、この場合、エミュレーターや端末では問題なく動いてしまうということです。

ネット上には、Rファイルを消してみろとか、genフォルダを消せとか、色々な意見がありましたが、全然とんちんかんな答えなので注意してください。

(以上の記事は私が管理人をやっているfaceBookのページにも記述してあります。)

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加
Related Posts Plugin for WordPress, Blogger...