概要
状態:学習中
閲覧数:2,368
投稿日:2013-07-08
更新日:2013-07-29
・「Androidアプリ作成日記」で、作成過程も含め、そのすべてを公開している
特徴
・全ソースコード掲載
・プロジェクトファイルを公開しているので、インポートするだけで利用可能
・データ保存にSQLite3利用
主な機能
・項目
・内訳
・金額
・カレンダー
注意事項
・制作中断した家計簿アプリのため、作りかけの部分等ではエラーも発生する
最終更新
・2011-12-17
感想
・無料でソースコード公開しているアプリとしては、「画面遷移」「DB連携」等している時点で、とても貴重
・「記事サンプルがアプリっぽくなくてがっかりしたことがある人」や「抜粋コードしか掲載されていないブログでは全体像が掴みづらい人」には最適かもしれない
特徴
・全ソースコード掲載
・プロジェクトファイルを公開しているので、インポートするだけで利用可能
・データ保存にSQLite3利用
主な機能
・項目
・内訳
・金額
・カレンダー
注意事項
・制作中断した家計簿アプリのため、作りかけの部分等ではエラーも発生する
最終更新
・2011-12-17
感想
・無料でソースコード公開しているアプリとしては、「画面遷移」「DB連携」等している時点で、とても貴重
・「記事サンプルがアプリっぽくなくてがっかりしたことがある人」や「抜粋コードしか掲載されていないブログでは全体像が掴みづらい人」には最適かもしれない
導入まで
3種類
公開形式は3種類
1.ソースコード
2.apkファイル
3.プロジェクトファイル
1.ソースコード
今までのソースコードがほしい、という方がいたので、
ソースコードを公開したいと思います。javaファイルをtextファイルにしました
・おお! 素晴らしいソースコードを公開したいと思います。javaファイルをtextファイルにしました
・早速ダウンロードしようとするも、動作させる自信がないため、一旦保留
2.apkファイル
apkファイルも公開したいと思います。
これをダウンロードすればAndroidで動くようです。
・おお! いいねーこれをダウンロードすればAndroidで動くようです。
・しかし、改めて調査したところ、「apkファイル」ではソースコード閲覧不可なことが分かり、見送り
3.プロジェクトファイル
[2011年12月17日追記]
なんかエラーが出るようですので、
プロジェクトファイルをのせます。
・おお! 神だわなんかエラーが出るようですので、
プロジェクトファイルをのせます。
・早速、ダウンロード
・Eclipseでインポート後、起動すると、無事成功!
動作確認
adb shell
adb shell
・DB連携させるために何か設定が必要ではないかと思い、ブログ全エントリーを読む
・すると「adb shell」起動させているエントリーを発見
adb とは?
・「Android Debug Bridge」の略称
・「Android SDK」 の 「platform-tools」 に含まれるツール
エミュレータをインストールしたフォルダのtoolsをPathに設定
・確認したところ、Pathは通していたD:\Android\android-sdk\platform-tools;
エミュレータを使用している場合は、エミュレータ上の、
メニューボタンの「設定」⇒「アプリケーション」⇒「開発」で「USBデバッグ」のチェックをオンにします
・設定済だったメニューボタンの「設定」⇒「アプリケーション」⇒「開発」で「USBデバッグ」のチェックをオンにします
データベース名一覧
・「cd data/data/パッケージ名/databases」で移動後、「ls」
C:\Users\Administrator>adb shell
# cd data/data/com.fc2.blog98.andromaker.housekeepingbook/databases
cd data/data/com.fc2.blog98.andromaker.housekeepingbook/databases
# ls
ls
HousekeepingBook.db
・予想に反してDBは作成されているみたい
テーブル名表示
データベース内のテーブル名を表示
1.「sqlite3 データベース名」 … 対象DB指定
2.「.table」 … データベース内のテーブル名を表示
# sqlite3 HousekeepingBook.db
sqlite3 HousekeepingBook.db
SQLite version 3.5.9
Enter ".help" for instructions
sqlite> .table
.table
2013-7 2013-7-7 android_metadata utiwake
2013-7-10 aaaa item
・この時点では見方が分からなかった(横一列に見るのだとばかり思っていた)
・え? どれがテーブル名?
・「item」はカラム名?
・しばらく操作後、再度確認したら、ようやく理解できたよ
・横一列じゃなくて、全部がテーブル名なんだね
・日付を「テーブル名」にしたことなんてなかったから戸惑ったけども、日付ベースで管理していくのだから、これでいいのか
.tables
2013-7 2013-7-8 android_metadata
2013-7-10 2013-7-9 item
2013-7-7 aaaa utiwake
テーブル内容表示
「select * from テーブル名で、テーブル内容表示
sqlite> select * from aaaa;
select * from aaaa;
sqlite> select * from item;
select * from item;
1|繝昴Ο繧キ繝」繝・
2|鬟イ鬟・
sqlite> select * from utiwake;
select * from utiwake;
1|譛・
2|繝代せ繧ソ
3|
sqlite> select * from android_metadata;
select * from android_metadata;
ja_JP
sqlite> select * from '2013-7';
select * from '2013-7';
1|繝昴Ο繧キ繝」繝л1690
2|繝昴Ο繧キ繝」繝л680
3|鬟イ鬟毫123
sqlite> select * from '2013-7-10';
select * from '2013-7-10';
sqlite> select * from '2013-7-9';
select * from '2013-7-9';
sqlite> select * from '2013-7-8';
select * from '2013-7-8';
1|繝昴Ο繧キ繝」繝л譛・
|1690
sqlite> select * from '2013-7-7';
select * from '2013-7-7';
1|繝昴Ο繧キ繝」繝л譛・
|680
2|鬟イ鬟毫繝代せ繧ソ|123
気が付いたこと
・カラム名は「''」で囲む(特に数字の場合は)
sqlite> select * from 2013-7;
select * from 2013-7;
SQL error: near "2013": syntax error
→「select * from '2013-7';」
・文字化け
・コマンドプロンプトの問題?
「adb shell」文字化け直そうとするも失敗
挫折
・文字化け対応に挑戦するも挫折
・修正を諦める
・「一度だけ表示に成功した」のだが、挙動不審すぎる。そんなの有りえないよね
・どういう条件の積み重ねで成功したのか、何度試しても再現できない
・「フォント変更」、「コマンドプロンプト再起動」「chcpで状態確認」、「バッチ試行」など、全て試してみたのに…
・もしかして「PC再起動」しなきゃダメとか?
・あるいは「Windows7」だから?
・「adb shell」?
・DBデータ自体を、「UTF-8」以外で処理してる?
明日のために
現在設定コード確認
chcp
UTF-8指定
chcp 65001
※「ラスターフォント」指定必須とされているが、文字化け解消されない
SHIFT-JIS
chcp 932
adb shell 2
テーブル設定
sqlite> .show
.show
echo: off
explain: off
headers: off
mode: list
nullvalue: ""
output: stdout
separator: "|"
width:
コマンド一覧
sqlite> .help
.help
.bail ON|OFF Stop after hitting an error. Default OFF
.databases List names and files of attached databases
.dump ?TABLE? ... Dump the database in an SQL text format
.echo ON|OFF Turn command echo on or off
.exit Exit this program
.explain ON|OFF Turn output mode suitable for EXPLAIN on or off.
.header(s) ON|OFF Turn display of headers on or off
.help Show this message
.import FILE TABLE Import data from FILE into TABLE
.indices TABLE Show names of all indices on TABLE
.load FILE ?ENTRY? Load an extension library
.mode MODE ?TABLE? Set output mode where MODE is one of:
csv Comma-separated values
column Left-aligned columns. (See .width)
html HTML <table> code
insert SQL insert statements for TABLE
line One value per line
list Values delimited by .separator string
tabs Tab-separated values
tcl TCL list elements
.nullvalue STRING Print STRING in place of NULL values
.output FILENAME Send output to FILENAME
.output stdout Send output to the screen
.prompt MAIN CONTINUE Replace the standard prompts
.quit Exit this program
.read FILENAME Execute SQL in FILENAME
.schema ?TABLE? Show the CREATE statements
.separator STRING Change separator used by output mode and .import
.show Show the current values for various settings
.tables ?PATTERN? List names of tables matching a LIKE pattern
.timeout MS Try opening locked tables for MS milliseconds
.timer ON|OFF Turn the CPU timer measurement on or off
.width NUM NUM ... Set column widths for "column" mode
dumpデータ取得
・処理されているっぽいけど、どこに出力されるか不明
sqlite> .dump ?item?
.dump ?item?
BEGIN TRANSACTION;
COMMIT;
・違うやん。こうか
sqlite> .dump item
.dump item
BEGIN TRANSACTION;
CREATE TABLE item (_id integer primary key,Item text not null);
INSERT INTO "item" VALUES(1,'繝昴Ο繧キ繝」繝・);
INSERT INTO "item" VALUES(2,'鬟イ鬟・);
COMMIT;
・テーブル単位ではなくDB単位で取得する際は、DB名を指定するのではなく省略!
sqlite> .dump
.dump
BEGIN TRANSACTION;
CREATE TABLE android_metadata (locale TEXT);
INSERT INTO "android_metadata" VALUES('ja_JP');
CREATE TABLE aaaa (_id integer primary key,Item text not null,Utiwake text,Kingaku text);
CREATE TABLE '2013-7-7' (_id integer primary key,Item text not null,Utiwake text,Kingaku text);
INSERT INTO "2013-7-7" VALUES(1,'繝昴Ο繧キ繝」繝・,'譛・
','680');
INSERT INTO "2013-7-7" VALUES(2,'鬟イ鬟・,'繝代せ繧ソ','123');
CREATE TABLE '2013-7' (_id integer primary key,Item text not null,Kingaku text);
INSERT INTO "2013-7" VALUES(1,'繝昴Ο繧キ繝」繝・,'1690');
INSERT INTO "2013-7" VALUES(2,'繝昴Ο繧キ繝」繝・,'680');
INSERT INTO "2013-7" VALUES(3,'鬟イ鬟・,'123');
CREATE TABLE item (_id integer primary key,Item text not null);
INSERT INTO "item" VALUES(1,'繝昴Ο繧キ繝」繝・);
INSERT INTO "item" VALUES(2,'鬟イ鬟・);
CREATE TABLE utiwake (_id integer primary key,Utiwake text not null);
INSERT INTO "utiwake" VALUES(1,'譛・
');
INSERT INTO "utiwake" VALUES(2,'繝代せ繧ソ');
INSERT INTO "utiwake" VALUES(3,'');
CREATE TABLE '2013-7-10' (_id integer primary key,Item text not null,Utiwake text,Kingaku text);
CREATE TABLE '2013-7-8' (_id integer primary key,Item text not null,Utiwake text,Kingaku text);
INSERT INTO "2013-7-8" VALUES(1,'繝昴Ο繧キ繝」繝・,'譛・
','1690');
CREATE TABLE '2013-7-9' (_id integer primary key,Item text not null,Utiwake text,Kingaku text);
COMMIT;
dumpデータ出力失敗
ダンプは通常ファイルなどに対し行います。出力先を指定するオプションはありませんので、「.output」コマンドを使って出力先をstdoutからファイルに事前に変更しておき、その後でダンプを行って下さい
・ところが、実際に試すと出力先を指定できない
can't write
.output ./data/dump.txt
can't write to "./data/dump.txt"
.output c://output.txt
can't write to "c://output.txt"
.output /output.txt
can't write to "/output.txt"
指定できるが、出力先パスが不明
sqlite> .output output.txt
.output output.txt
sqlite> .dump
.dump
sqlite> .output androidoutput.txt
.output androidoutput.txt
sqlite> .dump
.dump
sqlite> .output c:dump.txt
.output c:dump.txt
sqlite> .dump
.dump
sqlite> .output C:\output.txt
.output C:\output.txt
sqlite> .dump
.dump
sqlite> .exit
.exit
# ls
ls
C:output.txt
c:dump.txt
androidoutput.txt
output.txt
HousekeepingBook.db
・コマンドプロンプトから「adb shell」遷移先の、Windows全体におけるパスがどこにあるかが不明
・「ls」でファイル存在は確認できるのが、実ファイルがどこにあるか不明
・環境によってパスが異なる?
・確認する方法?
・出力ファイル名で、Windows検索しても見つからないのは、どういうこと?
・Android「adb shell」パスを知りたい
・ローカルファイルの保存先について
・「C:\Users\Administrator\.android\avd\Android1.6.avd」これなの?
SQLite終了
.exit