書評、アプリ開発、他
by Plateaua
プロフィールを見る
画像一覧
カテゴリ
全体
WikiLeaks
Android
iOS
mac
その他
未分類
最新の記事
sqlite3でテーブル内の..
at 2012-04-23 21:12
解析メモ
at 2012-01-12 14:28
[WikiLeaks][20..
at 2011-10-14 20:25
読売新聞のWikiLeaks..
at 2011-10-02 09:30
[WikiLeaks][20..
at 2011-09-29 23:18
以前の記事
2012年 04月
2012年 01月
2011年 10月
2011年 09月
2011年 06月
最新のトラックバック
検索
その他のジャンル
Twitter
外部リンク
ファン
記事ランキング
ブログジャンル
画像一覧

既存のsqliteファイルをAndroidに組み込む

大量の名簿が入ったSQLiteファイルをAndroidに入れて使おうと思っていたのですが、
色々躓いてきつかったので記そうと思います。

<androidでsqliteを扱う上での注意点>
①assetsフォルダとresフォルダの違い
②assetsフォルダからandroid内作業領域へのコピーは、通常のファイルコピーではなくInputstream→Outputstreamで行う。
③assetsフォルダからコピーできるファイルのサイズの上限は1M
④Zip解凍
http://android.migimaki.com/302/file/zipfile-%E3%81%A8-zipentry-%EF%BD%9Eandroid%E3%81%A7zip%E3%82%92%E8%A7%A3%E5%87%8D%E3%81%99%E3%82%8B

→①assetsフォルダとresフォルダの違い
assets:コピー後、androidからデータの変更が可能
res:データの変更不可
例えば、updateやinsetを行うdbファイルの場合はassetsへ、画像ファイルはresへという感じです。

→②assetsフォルダからandroid内作業領域へのコピー
assetsフォルダ内から作業フォルダ(私の場合は/data/data/パッケージ名/databases)へのコピーは通常のio.Fileでは行えません。以下のようにInputstream-Outputstream方式で行う必要があります。

try {
InputStream assetsFile = context.getAssets().open(F_NAME);//sqliteの場合

File f = new File(DEST_PATH + F_NAME);
File parent = f.getParentFile();
if (parent != null && parent.canWrite()) { parent.mkdirs(); }
FileOutputStream destFile = new FileOutputStream(f);

byte[] buffer = new byte[1024];
int length;
while ((length = assetsFile.read(buffer)) > 0) {
destFile.write(buffer, 0, length);
}
destFile.flush();
destFile.close();
assetsFile.close();

} catch (Exception e) {
}

→③assetsフォルダからコピーできるファイルのサイズの上限は1M
これには本当に泣かされました!
以下のサイトのやりとりにそのようなことが書いてあり、

http://stackoverflow.com/questions/1273300/ioexception-while-reading-from-inputstream

試しにファイルを1.2M→50kbに削ってみてやったところ、コピーもdbからのデータ取得も出来たので、おそらく正しいと思います。

→④Zip解凍
sqliteの場合はvacuumという最適化コマンドがあるのですが、私の場合はそれをやってもdbのサイズが1M以下にならなかったので、
1:assets内にzipで1M以下に圧縮して保存
2:assets→作業フォルダにコピー
3:作業フォルダ内でzipを解凍
という手順で行ったところ上手く行きました。
Javaでのzipの解凍方法は色々とあるのですが、以下のサイトに記されているコードが非常に簡潔で分かりやすかったのでお勧めです。感謝!
http://android.migimaki.com/302/file/zipfile-%E3%81%A8-zipentry-%EF%BD%9Eandroid%E3%81%A7zip%E3%82%92%E8%A7%A3%E5%87%8D%E3%81%99%E3%82%8B
[PR]
# by Plateaua | 2011-09-27 18:48 | Android

歯医者に行かずに歯のヤニを落とす

歯のヤニをドイツ製スポンジ(¥200~)で擦ったら...
a0216594_15132915.png

こんなに奇麗に!
a0216594_21271530.png


ドイツ製スポンジ(メラミンスポンジ)はホームセンターやドンキホーテ等どこでも売ってます
http://www.amazon.co.jp/レック-(LEC)-S-103-激落ちダブルキング/dp/B0011EVN1Y
http://www.amazon.co.jp/ワイズ-KE-030-ピカ王-レギュラーDX/dp/B003922QYE/ref=sr_1_7?s=kitchen&ie=UTF8&qid=1316931438&sr=1-7
[PR]
# by Plateaua | 2011-09-25 15:04 | その他

macのショートカットキーが変更できない

システム環境設定→キーボード→キーボードショートカット でショートカットキーを変更しようとしたところ「ショートカットをダブルクリックして新しいキーを押してください」とあるのに項目をダブルクリックしても反応がない。
解決方法は、キーボードショートカット画面は以下のように分かれており、

a0216594_20322352.png


右の部分をクリックすること。
分かってしまえばどうということは無いのですが。。。
[PR]
# by Plateaua | 2011-09-23 20:35 | mac

アプリが実行されない

外部からprojectをインポートして実行したところ、
エミュレータは起動したのにアプリが実行されない。
"project"→"clean"した後に再度実行で解決。
[PR]
# by Plateaua | 2011-09-23 11:40 | Android

The project was not built since its build path is incomplete.

外部からプロジェクトをインポートした時に発生。
ライブラリの問題だとネット上の開発者向け掲示板にあったので
プロジェクトの"properties"→"JavaBuildPath"→"Libraries"を見ると、
他のプロジェクトには"Android1.5"が入っているにも関わらずこのプロジェクトには入っていなかった。

解決法
"properties"→"JavaBuildPath"→"Libraries"→"AddLibrary"→"Android ClasspathContainer"
[PR]
# by Plateaua | 2011-09-22 18:47 | Android