2012年3月31日土曜日

Eclipse にADT17 を適用

※Eclipse英語版使ってます。

Android SDK Manager を見ると、ADT1.7 が出てきたのでアップデートしたら、いつもは出てこないメッセージ。何やら「help」⇒「Chack for Update」をやってくれとのこと。

たぶんADT上がるに合わせてEclipseのVersionも上げよ的なことかなと実施したら。。
最初のアップデートチェックからして長い、、そしてDDMSとかの面々が出てきてaccept してからも長い。。
しまいにはエラーでボツ。

まあ、よくある事と、いい加減重くなってたので、とりあえずEclipse終了。
再立ち上げしたら、SDK Manager 見れずにエラー。なにやらpropertyから設定してくれとか?
見ても分からんので、とりあえずEclipseのUpdateを再開。今後は早めに終わって、再起動要求。
今度は大丈夫そうだ~と再起動後に正常になりました。

その後、ネットで見たらハマったひと結構いるみたい。

ここ
http://cyberspacefarm.com/2012/0328/adt17-nullpointerexception/
見ると、順番も大事とか??

2012年3月30日金曜日

大感謝!

七並べのダウンロードが一万を超えました!
3/4に公開してから一ヶ月弱でここまで来るとは全く想定外でした。
遊んでいただいている皆様に、ただただ感謝です。
今後ともよろしくお願いいたします。

七並べ
https://play.google.com/store/apps/details?id=com.blogspot.yazakikenji.sevens

2012年3月23日金曜日

Android 試験に合格しました!

Androidアプリケーション技術者認定試験ベーシック(ACE) OA0-001
に合格しました。

アプリ開発の実績は3件。
その上で試験勉強の期間は2週間ほど。

参考書で一番良かったのは、
携帯OS教科書 Androidアプリケーション技術者ベーシック(緑本)
です。
模試からも結構出てました。

合格ラインが70%なので、基本的なことがシッカリ分かっていれば、まず合格できるはずです。


・追記)緑本の模試に関して。
こういった模試は、やらずにとっておいて試験の直前に力試しでやる人もいると思いますが、今回は非推奨です!
練習問題と思って勉強期間中盤にやって、間違えたところを中心に何度も繰り返しましょう。
出題頻度高です。

2012年3月19日月曜日

感謝!

七並べのダウンロードが1000を超えました!
予想外の好反応に驚いています。
遊んでいただいている皆様に感謝です。
今後ともよろしくお願いいたします。

七並べ
https://play.google.com/store/apps/details?id=com.blogspot.yazakikenji.sevens

2012年3月18日日曜日

MpMemo のバグを修正

Version3.2 から、テキストデータを取得できるようになりましたが、
インテント受信時に自動保存が無効になっている場合、保存が出来ないバグがありました。
現在のVersion3.4 では修正されています。
気づくのが遅れまして申し訳ありませんでした。
お手数ですが、更新をお願いいたします。
https://play.google.com/store/apps/details?id=com.blogspot.yazakikenji.mpmemo

2012年3月16日金曜日

最近

ここ数日、資格試験の勉強に集中しています。
あと一週間しかないので、今はとにかく勉強が最優先です。

とはいえ、公開しているアプリの手当も必要で、、ちょっと余裕がない状況です。

2012年3月12日月曜日

アプリ更新

MpMemo
https://play.google.com/store/apps/details?id=com.blogspot.yazakikenji.mpmemo

七並べ
https://play.google.com/store/apps/details?id=com.blogspot.yazakikenji.sevens

それぞれアプリ更新しました。


MpMemo はテキストファイルの読み込みに対応。
ようやく実装できたのです。
(URIやFile といったクラスについてよく分かってなかった。。


七並べ は、スプラッシュ画面で戻るキー無効。
数値処理やダイアログ表示方式を修正など。


ところで、気になっているのですが、
更新が多いアプリって、ウザイですか??

最近の原道N50

あんまり気にしてなかったんだけど、
このブログで一番閲覧されている記事って、
原道N50を購入、のページなんだよね。

というわけで、最近のN50について報告。

ちょっと動作がモッサリしてきたが、概ね問題なく動いています。
アプリを起動したまま、ロック画面に入るとたまにフリーズしてRボタンをつつくハメになりますが。。


そんなこんなで久しぶりにアマゾンで見たら、1万円ポッキリで売っとる!
自分が買った時より、2000円以上も安いじゃないか。

2012年3月11日日曜日

INTの最大値

JAVAでINTの最大値を超えるとどうなるか?

こちらを参照。
http://d.hatena.ne.jp/GARAPON/20090415/1239798925

つまりマイナスへ。
エラーには、ならない。

というかその前に適当なところにリミットつけるべきなんだろう。

2012年3月7日水曜日

Google Play

android マーケットが、Google Play に変わってます!

一応、旧アドレスでも大丈夫なようだが?

2012年3月5日月曜日

SQLite について

android でのSQLite 実装について書きます。

SQLite というのはデータベースであり、イメージとしては、こんな感じです。



① まず、メインとは別に、SQLiteのHelperクラスを作ります。

エクリプスで新しいクラスを選び、スーパークラスに SQLiteOpenHelper を指定して、クラス名は適当につけてクラス作成。
すると、onCreate と onUpgrade(必須のメソッド)が自動的に作成されます。

(自分の環境だと)クラス名のところにエラー出るのでポインタ合わせると、コンストラクタを作って的なメッセージ。そのままクリック。すると、自動的にコンストラクタが作成されます。

コンストラクタとonUpgradeメソッドは、そのままで大丈夫ですが、onCreate に処理を書く必要があります。

■ onCreate の処理
db.execSQL()メソッドの引数にSQL文を書きます。

以下の設定とすると、
・ テーブル名:hoge
・ カラム名A:fuga(テキスト情報)
・ カラム名B:piyo(数値情報)

文字列で、

"create table if not exists "+
"hoge"+
"(_id INTEGER primary key autoincrement,"+
"fuga"+" TEXT,"+
"piyo"+" INTEGER)"

と書きます。

最初は定型文。
三行目は、お約束。(これの実装が前提に作られているものが多いらしい)

これで、ヘルパークラスの作成は終わりです。


② 次にメイン側での処理。

上で作成したヘルパークラスのインスタンスを作成します。
その際の引数について。(これがヘルパークラスのコンストラクタに引き渡される)

・第1引数:Context
・第2引数:データベース名
・第3引数:CursorFactory(不明)
・第4引数:データベースのVersion

第1引数のContext には、getApplicationContext() を指定します。
第2引数は、データベース名です。任意の文字.db
第3引数は、よくわかりません。null でいいと思います。
第4引数は、Versionということですが、とりあえず1でいいです。

これに、getWritableDatabase() メソッドを使い、
SQLiteDatabase クラスの変数に代入して、準備完了です。


■ データベースに書き込むには?
execSQL()メソッドにSQL文を書く手もありますが、これを使わない方法もあります。
ContentValues クラスを使います。(データベース未経験なら、こちらのほうが分かりやすいかも)

ContentValues クラスの変数に、put メソッドを使い、カラム名とデータを指定します。
必要なデータをまとめておくわけです。

・ 追加したい場合は、
SQLiteDatabase クラスの変数に、insert() メソッドを使い、
第1引数:テーブル名
第2引数:(不明)null
第3引数:上で作成したContentValues クラスの変数を指定

・ 更新したい場合は、
update()メソッドを使います。
第1引数:テーブル名
第2引数:上で作成したContentValues クラスの変数を指定
第3引数:更新する条件にするカラム名
第4引数:第3引数に指定したカラム名にあるデータ

ContentValues の変数は、使ったら clear() メソッドで掃除しましょう。

※応用
update() メソッドは、更新したレコード数を返します。
よって、0が返ってきたら、更新するものがなかったと判断。
最初に update() し、if文で0だったら insert() するという書き方ができます。


■ データベースからデータを任意の形で取得するには?
Cursol クラスのインスタンスを、SQLiteDatabase のquery メソッドで取得します。

query の引数は以下。
第1引数:テーブル名
第2引数:取得するカラム名
第3引数:検索条件
第4引数:検索条件の値
第5引数:group by 句
第6引数:Having 句
第7引数:order by 句

必須なのは第1引数のみです。(使わないところはnull
これで指定したテーブル名のデータが取れます。

条件、例えば、カラムBの値で、降順で取得したい場合は、
第7引数(order by)に、"カラムB DESC"と指定します。

ここで、最初の画象の「1行目 ⇒」となっているイメージ、つまりカーソルという概念でデータを一行ずつ取得します。

moveToFirst() で頭に移動。
Cursol の getColumnIndex() の引数にカラム名を指定してデータ取り。
moveToNext() で次の行へ移動。

Cursol は、使い終わったら、Close します。


おしまいに、onDestroy() で
SQLiteDatabase と SQLiteOpenHelper のインスタンスにclose() メソッドをかけましょう。

追記)クローズについて
以下の記事
http://d.hatena.ne.jp/ukiki999/20100524/p1
では、明示的にクローズする必要ないとのこと。

追記2)
ためしにClose処理を外してみたところ、
android.database.sqlite.SQLiteException: database is locked
エラーが発生。
onCreate でオープンにしてるところで。
ただし頻度は非常に低いようです。
また本当にこれが原因だったのかどうか?
どうもSQLite はよく分からないことが多くて困ります。。

七並べを公開しました。

ようやく公開できました。

https://market.android.com/details?id=com.blogspot.yazakikenji.sevens

やっぱりゲームを作るのは大変です。
テストクラスの必要性を感じました。

2012年3月4日日曜日

ダイアログの表示方法による違いについて

ダイアログ(Dialog)の作り方ですが、
show(); で直接表示する方法と、
create(); でインスタンスを作り、Activityにヒモづいて表示させる方法があります。

ただし、show(); を使うと以下のように
http://androidr.sblo.jp/article/44022356.html
バックグラウンドでエラーが発生します。

なのでcreate(); を使いたくなるのですが、
ダイアログ表示の度に、表示内容を変更したい場合は注意が必要!
一回目の表示の時に、インスタンスが作成されるので二回目以降に処理がされません。

※参考
http://ichitcltk.hustle.ne.jp/gudon/modules/pico_rd/index.php?content_id=52

回避するには、removeDialog()でインスタンスを削除します。


final static int DIALOG1=0;

showDialog(DIALOG1);

Dialog onCreateDialog(int id)~
return new AlertDialog.Builder ~ .create();

removeDialog(DIALOG1);


追記)
上記メソッドは現時点で非推奨になっています。
http://developer.android.com/reference/android/app/Activity.html#showDialog(int)

プリファレンスの削除について

プリファレンス(SharedPreferences)の削除で、地味にハマったのを思い出したので投稿メモ。


プリファレンスを削除する場合、
clear()メソッドを使う、となっています。

でも、clear()だけしても削除されません。
commit()する必要があります。(ここでハマった。。

この辺、検索してもちゃんと説明しているサイトを見つけられなかった。
分かってる人にとっては、
そりゃcommit()しないと確定しないでしょ、、という話なんだろうけど^^;


というか、そもそも削除が必要なケースがあまりないのかもしれない。
削除というか、クリアすると考えれば、
初期値を代入する、という方法が普通なんでしょう。


※サンプルコード

SharedPreferences pref;
Editor editor;

pref=getPreferences(MODE_PRIVATE);
editor=pref.edit();

editor.clear().commit();

2012年3月3日土曜日

七並べの完成へむけて

メモアプリの前に作っていた七並べを近日中に完成させたいと思っています。

今の作業が終われば、あとは自己満足の世界なので。。

終わったらアプリ制作は一段落として、アンドロイド試験の勉強に力点を移そうかと考えています。


・今後の投稿予定
SQLite(七並べでプレイヤーの点数管理に利用)
試験のこと。(合格できたら)