【Java】特定のclassのstaticなプロパティに、動的にアクセスしたい

大量にある、連番のstaticなstring propertyに一気にアクセスさせたいと思い…調べると、以下のような事で実現可能だった。(まあ…javaなのでちゃんとclass設計しておけば、このようなバグを招きやすいような処理を入れることもないでしょうけど…(^o^))


Class utils = Utils.class;//Utils classへの参照を取得

  Field keyName = utils.getField("STATIC_FIELD_SAMPLE" + 0);//"STATIC_FIELD_SAMPLE0"というstatic propertyへの参照を取得

  String resultStr = (String)keyName.get(null);//"STATIC_FIELD_SAMPLE0"に設定されている(この場合は)文字列を取得

(※本来は、上記はtry〜catchで囲わないと警告が出ると思われます)

Androidで実行時、windowのbackgroundに画像を設定していると、遷移時にdefault.pngが透ける

Androidで実行時、windowのbackgroundに画像を設定していると、遷移時にdefault.pngが一瞬透ける(初回は抜けない、2度目以降に抜け出す。default.pngを表示しない設定にすると、今度は真っ黒な表示が一瞬出る)という問題が3.0でも未だに直っていない…。(iOSでは問題無い)

なので、開かれる側のwindowにはほぼ必ずviewを置くと思うので、そこのbackgroundに指定する必要がある。

…3.0で結構Androidが改善されたというアナウンスが合ったけど、あまり2.0系と変わっていないような…

Program launch failed. Unable to locate Java VM. Please set JAVA_HOME environment variable.

Android用apkをwindowsでビルドしようとした時、

Program launch failed. Unable to locate Java VM. Please set JAVA_HOME environment variable.

http://developer.appcelerator.com/question/139068/tistudio-win7-64bit-program-launch-failed-unable-to-locate-java-vm-please-set-javahome-environment-variable
というエラーが出た場合、
システム環境変数の変数に「JAVA_HOME」が設定されているのを確認するのはいいとして
(いつもいろいろ追加していく「path」ではなく、新規の変数を作る必要がある)、
さらに、そもそもTitanium3.0になった今でも、JDK1.7に対応していないのか、
1.6にpath一式を切り替えないと、上記のエラーが出続けていた。

mapviewのannotation長押しでデフォルトのピンに戻ってしまう問題など

・mapviewのannotationを長押しで、なぜかデフォルトの赤いピンに戻る

→ MKPinAnnotationViewではなく、MKAnnotationViewを使う。
(※http://stackoverflow.com/questions/9275959/annotation-image-is-replaced-by-redpushpin-when-long-press-on-annotation


・置いたピンを押しても、ウインドウが出てこない

→annotationに、少なくともtitleが設定されていないと、反応しなくなる。

Titanium/Androidモジュールの作成でdocs does not exist…

C:\Users\UserName\AppData\Roaming\Titanium\mobilesdk\win32\2.1.4.GA\module\android\build.xml:455: C:\Users\UserName\Desktop\work\MyModuleName\build\docs does not exist.

 
というエラーが。…なんて事は無く、文字通り、buildフォルダに「docs」というフォルダを作った後、再ビルドで最後まで行けた。
 

Titaniumで作ったapkを、Google Playにアップしようとすると「apk をサーバーで処理できません」と言われる…など

まずは見にくいblogですみませんm(_ _)m

かなり小ネタですが…以下に書いていきます。

(この記事は @astronaughts さんの企画「Titanium mobile “early” Advent Calendar 2012」の27日目の記事です)

TitaniumでAndroid向けに書き出したapkをGoogle Playにアップすると、
何度やっても「apkをサーバで処理出来ません」と言われる…。
時間を変えて何度やってみてもダメで、違うプロジェクトだと大丈夫なので、
いよいよ中身を疑うことに。

色々比較していった結果…manifestファイルで、

Applicationname

のように、application nameをstringファイルから引っ張ってきているのですが、
その場合、ローカライズフォルダ(i18n)に、enフォルダが無いといけませんでした。

Error

最初、ここをjaフォルダだけにしていたのですが(日本語向けしか考えていない内容だったので)、内容は全く同じで良いので、とにかくenフォルダは最低限必要なようです。

でないとエラーは出なく、ローカルでは問題無く動くのにストアにアップできないというapkになってしまう模様です…。

※2012/11/30追記
別の方より情報をいただいたのですが、あと、
platform/android/AndroidManifest.xml
に自前のマニフェストファイルを置いて作る事は多いと思いますが、
そこの中で、パーミッション部分をコメントアウトして残している部分を
消してみたら登録できるようになった、という事もあるようです。

//////////////////

あと記事にするまでもない、かなり小さい小ネタを…。

・1
当たり前と言えば当たり前なのですが、
ローカライズxmlの中では、ダブルクォーテーションはエスケープするように。
でないと、Androidは問題無いのですが、iOS環境でローカライズが効かなくなります。

・2
http://docs.appcelerator.com/titanium/latest/#!/api/Titanium.Cloud.Objects
の「Show Custom Objects」の取得方法が間違ってる!

ids:[saveCar1.id , saveCar2.id]

となっていますが、なんと、カンマ区切り文字列にして渡さないとだめでした。

ids:["111111, 222222"] みたいに…

//////////////////

※業務とは関係なく、趣味でTitaniumで作成したアプリをリリースしています、

厨二病ワードを共有、Twitterに投稿などが出来る「俺は厨二病」、
完全に趣味なアプリ「アニメデータベース&ランキング

の2本を最近リリースしました、もしよければDLしてみてください!