2011年12月アーカイブ


android のアプリを開発していると、

ERROR/AndroidRuntime android.content.res.Resources$NotFoundException:String resource ID #0x7f050019

というようなエラーがたまに出る。
リソースが無い、と言って怒られているのだが、プロジェクトの中を見てみると確かにリソースが存在して、問題ない。
コンパイルも通っている。

こういう時は、以下の手順でプロジェクトをキレイにすると直る。(eclipse での開発の場合)

・[Project]-[Clean] を選択
・Clean projects selected below のラジオボタンにチェックを入れる
キレイにしたいプロジェクトのチェックボックスにチェックを入れ
・OKボタンをクリックする
・F5キーを押して、プロジェクトをRefresh する

以上で、ランタイムエラーが消えます。(Refreshはいらないかもしれないが一応やっておく)

リソースを追加したときなどに、キャッシュの情報などが混乱して上記のエラーが出ると思われます

画像ファイルからアスキーアートを作成するandroidアプリを公開しています。
ダウンロードはこちら

試しにいくつかアスキーアートを作成してみました。
-----------------------------------------------------------------------------
マクドナルドのロゴです。

mac.png

-----------------------------------------------------------------------------
今度はセブンイレブンのロゴ。
711.png
-----------------------------------------------------------------------------
横断歩道の標識です。運転注意。
sign1.png
-----------------------------------------------------------------------------
アンパンマン。輪郭がはっきりしているのでやりやすい。
anpanman.png
-----------------------------------------------------------------------------
Googleさん
google.png
-----------------------------------------------------------------------------
firefox のロゴ。さすがにこのぐらい複雑になるとゴチャゴチャしてきます。
firefox.png
-----------------------------------------------------------------------------
ベンツ。こちらはクッキリ。
benz.png
-----------------------------------------------------------------------------
Windows。こちらもはっきり。
windows.png
-----------------------------------------------------------------------------
つぶやき。
twitter.png
-----------------------------------------------------------------------------
スターバックス。
starbucks.png
こんな感じです。
アプリのダウンロードはこちら


アプリを作ろうと思って、最新の admob SDK(GoogleAdMobAdsSdk-4.3.1.jar) を入れたらAdActivity を configChanges 付きで Manifest に記述しなさい、と怒られたので記述したら、以下のように、そんな configChanges は許しまへんで。とまた怒られてしまいました。

Error: String types not allowed (at 'configChanges' with value 'keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize').

じゃぁ、どうすればいいのでしょう。。と、いろいろいじってみたところ、どうやら「screenSize」と「smallestScreenSize」が怒られているらしい。
それを外すとビルドは通るが実行時に
The android:configChanges value of the com.google.ads.AdActivity must include screenSize.
The android:configChanges value of the com.google.ads.AdActivity must include smallestScreenSize.
と怒られます。

さらに調べてみたところ、解決方法は、ビルドターゲットのSDKをAPI level 13(Android 3.2) 以上にすることのようでした。
変更したら、ビルドも通り、実行時のエラーも無くなりました。

2.3でも動くアプリなので、未対応APIを記述してしまわないように気をつけないと。
何とか改善をお願いしますadmobさん。


android の VideoView を使って動画を再生させる際に、Viewがタップされたら再生を開始するようにしようと思って、普通に setOnClickListener でリスナーをセットして、onClick イベントを取得しようとしたが、まったく反応がありませんでした。

setOnTouchListener で onTouch イベントを拾うようにしたらできました。

iOSアプリのデバッグをしていて、バックで生きているであろうタスクを終了させたいと思ったので調べたら、以下の方法で終了できました。

・ホームボタンをダブルタップ

・終了したいタスクのアイコンを長押し

・終了したいタスクのアイコンの左上にある(-)マークをタップ

で終了させられます。


iOSのアプリを実行しようとしたら以下のようなエラーが出るようになった。

Couldn't register com.example.ios with the bootstrap server.
Error: unknown error code.
This generally means that another instance of this process was already
running or is hung in the debugger.
Program received signal: "SIGABRT".

調べてみたら、端末(もしくはエミュレータ)を再起動すると直る、とのことだったので再起動してみたらあっさり直りました。
どうやら、端末(エミュレータ)上でプロセスが中途半端な状態で残っているときに起こるようです

FLEX で サーバからXMLを取得して、そのXMLを解析して処理しようと思い、以下のようなコードで実行しました。

service = new HTTPService();
service.url = "http://example.com/sample" ;
service.method = "GET";
service.addEventListener("result", httpResult);
service.addEventListener("fault", httpFault);
service.send();

しかし、結果として文字列がほしいのに、オブジェクトになってしまいます。

調査の結果 HTTPService の resultFormat に text を設定することで、無事に文字列として取得できるようになりました。

service.resultFormat = "text" ;

な感じ


EC2 のメンテナンス

| コメント(0) | トラックバック(0)

数日前AWS(Amazon web service)から、EC2のメンテナンスのためインスタンスをリブートするというメールが来ました。

リブートは「システムリブート」と「インスタンスリブート」という二種類があるらしく、1つのインスタンスはシステムリブート、その他のインスタンスはインスタンスリブートでのメンテナンスでした。

システムリブートは、インスタンスが乗っているハードか何かを再起動する必要があるため、ある決まった時間にそのハードの上に乗っているEC2インスタンスを一斉にリブートするようです。
従って、ユーザ側ではリブートのタイミングを決められず、アマゾンがリブートするのを待って、動作確認をしないといけない。
自由に時間を決められないというのはけっこう厳しい、自分の場合、土曜日の19時?21時の間がメンテナンスの時間だったので、その間、いつ来るかいつ来るかと画面とにらめっこしていました。
週末の貴重な時間が。。。
しかも、メンテナンスのお知らせメールが来たのが金曜でメンテナンスの実行が翌日の土曜日というのはちょっと急すぎ。2日間メールを見ていなかったら終わりです。
EBS backed のインスタンスであれば、Stopしてからstart すると別マシンで起動するようなので、自分の決めた時間で対応できるようです。
S3 backed のインスタンスでも、自分でインスタンスを terminate してから、別インスタンスとして起動すれば、別マシンで動くので、こちらも自分の決めた時間で対応可能なのですが、EBSの再アタッチとかいろいろとめんどくさそうだったので、私はシステムリブートを待つことにしました。

もうひとつのインスタンスリブートは、自分でタイミングを決めて実行することができますので、システムリブートよりも気が楽です。
インスタンスのリブートをかければ、メンテナンスは完了するので、こちらは自分で決めたタイミングで行ったほうが良いかと思います。
自分でやらないまま、メンテナンス時間がくるとアマゾンのほうでリブートがかけられます。

この件で思ったのは、サーバが起動(リブート)したときは、自動で必要なサービスや設定が立ち上がるようにしておくのが良いかと思いました。
マシン起動後に手動で何かしなければいけないことがあると、予期せぬリブートの際などに、大変なことになります。
(もしかするとサーバ管理者の基本かもしれませんが。。。)




このアーカイブについて

このページには、2011年12月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2011年11月です。

次のアーカイブは2012年1月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 5.13-ja