Android データベースにアクセスする

Androidでデータベースにアクセスするには、次のクラスを用意する。

@SQLiteOpenHelper クラスを継承したヘルパークラス
Aアクセスしたいテーブルのエンティティクラス
Bデータベースにアクセスするクラス

次のようなテーブルにアクセスするという例。

データベース名: sample_data
テーブル構造:
idinteger
itemtext


@SQLiteOpenHelper クラスを継承したヘルパークラス


public class DatabaseOpenHelper extends SQLiteOpenHelper{

public DatabaseOpenHelper(Context context) {
super(context, "sample_data", null, 1);

}

@Override
public void onCreate(SQLiteDatabase db) {
ContentValues values = new ContentValues();
String sql = "create table sample ( id integer primary key not null, item text )";

db.execSQL(sql);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

}


Aアクセスしたいテーブルのエンティティクラス


public class ItemSample {

private int id = 0;
private String item = null;

public int getId() {
return id;

}

public void setId(int id) {
this.id = id;

}

public String getItem() {
return item;

}

public void setItem(String item) {
this.item = item;

}

}


Bデータベースにアクセスするクラス


public class DaoSample {

private SQLiteDatabase db = null;
private DatabaseOpenHelper dbHelper = null;

public DaoSample(DatabaseOpenHelper dbHelper) {
this.dbHelper = dbHelper;

}

/**
* idをキーにレコードを検索する
*/
public ItemSample findById(int id) {
Cursor cursor = null;
ItemSample itemSample = new ItemSample();

try {
db = dbHelper.getReadableDatabase();
cursor = db.query("sample", new String[] {"id", "item"}, "id = ?", new String[] {String.valueOf(id)}, null, null, null);
while (cursor.moveToNext()) {
itemSample.setId(cursor.getInt(0));
itemSample.setItem(cursor.getString(1));
}

} catch (SQLException e) {

} finally {
if (cursor != null) cursor.close();
if (db != null) db.close();

}

return itemSample;

}

/**
* テーブルにレコードを追加する
*/
public long insert(ItemSample itemSample) {
ContentValues values = new ContentValues();
values.put("id", itemSample.getId());
values.put("item", itemSample.getItem());

long rowId = -1;

try {
db = dbHelper.getReadableDatabase();
db.beginTransaction();
rowId = db.insert("sample", null, values);
db.setTransactionSuccessful();

} catch (SQLException e) {

} finally {
if (db != null) {
db.endTransaction();
db.close();

}
}

return rowId;

}

}
続きを読む
posted by へっぽ at 05:47 | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

MPAndroidChartで描いた線グラフに、指定した値を強調する線(Limit Line)を引いてみる

MPAndroidChartで描いた線グラフで、Y軸のある値を強調した補助線を引きたいと思ったので、やり方をメモ。

ここで作成したMaingActivity.javaに、次の記述を追加する。
LineDataSet valueDataSet = new LineDataSet(value, "sample");
dataSets.add(valueDataSet);

// 追加ここから
// Limit Lineを設ける
YAxis yAxis = lineChart.getAxisLeft();
LimitLine ll= new LimitLine(250f, "This is a limit line");
ll.setLineColor(Color.MAGENTA); // Limit Lineの色
ll.setLineWidth(4f); // Limit Lineの太さ
ll.setTextSize(10f); // テキストサイズ
yAxis.addLimitLine(ll);

LineData data = new LineData(xValues, dataSets);
lineChart.setData(new LineData(xValues, dataSets));



するとこのような線グラフが描ける。

LineChartSampleWithLimitLine.jpg
posted by へっぽ at 01:21 | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

ローカルファイルの書き込み/読み込み

Androidのデータ保存方式にローカルファイルがある。

例えばEditTextの内容をローカルファイルに書き込むときは、次のようなコードとなる。

EditText et = (EditText) findViewById(R.id.et);

try {
    // EditText の値をローカルファイルに書き込む
    OutputStream os = openFileOutput("sample.txt", MODE_APPEND);
    PrintWriter pw = new PrintWriter(new OutputStreamWriter(os, "UTF-8"));
    pw.append(et.getText().toString() + "\n");
    pw.close();

}catch (IOException ie) {
    ie.printStackTrace();

}

また、作成したローカルファイルを読み込んで、TextViewに表示する場合などは、次のようなコードとなる。

TextView tv = (TextView) findViewById(R.id.tv);

try {
    // ローカルファイルを読み込み、TextViewに表示する
    InputStream is = openFileInput("sample.txt");
    BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
    String str = null;

    while((str = br.readLine()) != null) {
        tv.append(str);
        tv.append("\n");
   
    }

}catch (IOException ie) {
    ie.printStackTrace();

}
posted by へっぽ at 01:12 | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

MPAndroidChartで線グラフを描いてみる

MPAndroidChartというフリーのAndroidグラフ描画ツールで線グラフを描いてみた。
最も基本的(?)なメソッドをメモ。

@ app直下のbuild.gradleに以下を記述する。
repositories {
    maven { url "https://jitpack.io" }
}
dependencies {
    compile 'com.github.PhilJay:MPAndroidChart:v2.1.5'
}

A layoutの作成(activity_main.xml)
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.github.mikephil.charting.charts.LineChart
        android:id="@+id/line_chart"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
</LinearLayout>

B MainActivityの作成
import android.app.Activity;
import android.os.Bundle;

import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.data.Entry;
import java.util.ArrayList;

public class MainActivity extends Activity {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        LineChart lineChart = (LineChart) findViewById(R.id.line_chart);

        ArrayList<LineDataSet> dataSets = new ArrayList<>();

        // X軸の値
        ArrayList<String> xValues = new ArrayList<>();
        xValues.add("No.1");
        xValues.add("No.2");
        xValues.add("No.3");
        xValues.add("No.4");
        xValues.add("No.5");

        // value
        ArrayList<Entry> value = new ArrayList<>();
        value.add(new Entry(100, 0));
        value.add(new Entry(120, 1));
        value.add(new Entry(150, 2));
        value.add(new Entry(250, 3));
        value.add(new Entry(500, 4));

        LineDataSet valueDataSet = new LineDataSet(value, "sample");
        dataSets.add(valueDataSet);

        lineChart.setData(new LineData(xValues, dataSets));

    }

}





するとこのような線グラフが描ける。

LineChartSample.jpg
posted by へっぽ at 23:49 | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

Android Studio デバッグなのにブレークポイントで止まらない

Android Studio を使っていて、ブレークポイントを設定しているのにデバッグで停止してくれない事態に遭遇。

幾つか原因はあるらしいが、今回は build.gradle に 記述が足りなかったため。

build.gradle を開き


buildTypes {
debug {
debuggable true
}
:
}


を追加したらブレークポイントで止まるようになった。

posted by へっぽ at 23:36 | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

includeを使ったレイアウトで実行時エラー android.view.InflateException: You must specify a layout in the include tag: <include layout="@layout/layoutID" />

Androidアプリ開発にて。
レイアウトをいくつかのXMLファイルに分割し、main.xmlにincludeタグを使用。
エミュレータで実行したところ、以下のエラーが。

android.view.InflateException: You must specify a layout in the include tag: <include layout="@layout/layoutID" />



どうやらincludeタグにおけるファイル指定の仕方が間違っていたらしい・・・

(誤)
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<include
android:layout="@layout/child_layout" />

(正)
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<include
layout="@layout/child_layout" />


ならandroid:layoutで予測変換出してくれるなよ・・・

しかも実はこれだけではエラーは消えず、何故かわからないが改行コードを入れたり消したりすると初めてエラーが消えてくれたのでした!


posted by へっぽ at 23:54 | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

[Android Studio] エミュレータが起動しない!必要な初期設定

Android Studio は下記URLからダウンロード後、zipファイルを解凍しexe(*)を実行してインストールする。

http://developer.android.com/intl/ja/sdk/index.html
(*)Windows10でandroid-studio-bundle-143.2790544-windows.exeを実行

しかしインストール後、そのままの状態ではエミュレータが起動してくれない。
エミュレータを起動するためには、さらに追加のSDKおよびHAXMをインストールする必要がある。

・追加のSDKのインストール
@ SDK Managerを起動し、Appearance & Behavior > System Settings > Android SDK へ進む。
A 右下にある 「Show Package Details」 にチェックを入れる。
B 64ビットマシンなら「Google APIs Intel x86 Atom_64 System Image」に、32ビットマシンなら「Google APIs Intel x86 Atom System Image」にチェックを入れる。
C OKボタンを押してインストールを開始する。

・HAXMのインストール
@ SDK Managerを起動し、Appearance & Behavior > System Settings > Android SDK へ進む。
A 「SDK Platforms」タブが開いているので、「SDK Tools」タブに切り替える。
B 「Intel x86 Emulator Accelerator (HAXM Installer)」にチェックが入っていなければチェックを入れる。
C 上部の「Android SDK Location」に書かれているパスをエクスプローラで開き、extras > intel > Hardware_Accelerated_Execution_Manager フォルダを開く。
D intelhaxm-android.exe を起動し、ウィザードに従ってインストールする。


お世話になったサイト。ありがとうございます!
https://codezine.jp/article/detail/9245

posted by へっぽ at 00:07 | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

Android UIテストツール[UI Automator]

Android開発のUIテスティングツールとして、UI Automatorがある。
UI AutomatorはEspressoと同じく、Android Testing Support Libraryで提供されているフレームワークである。

最も大きな特徴は、ブラックボックス・アプリのテストができるということ。
つまり、他人が作ったアプリでもテストできるという点である。

ソースコードがない中で画面のコンポーネントを特定できるよう、種々のメソッドが提供されている。また、画面上のコンポーネントの構成をGUIで確認できるUI Automator Viewerも用意されている。

http://developer.android.com/intl/ja/tools/testing-support-library/index.html#UIAutomator

posted by へっぽ at 20:31 | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

Android UIテストツール[Espresso]

Espressoとは、Android Testing Support Libraryにより提供されている、UIテストのためのフレームワーク。
Android2.2(API level8)以上で動作する。

利用するには、まずAndroid Studioでテストコードのセットアップをする。
テストコードを書く、build.gradle の dependencies を編集する・・・etc。
http://developer.android.com/intl/ja/training/testing/start/index.html#config-instrumented-tests

具体的な利用手順やメソッドは今後アップデート予定。

http://developer.android.com/intl/ja/training/testing/ui-testing/espresso-testing.html
posted by へっぽ at 15:57 | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

Android Studio リソースフォルダの構成

Android Studioで開発する際、諸々のリソースファイルは「res」フォルダに配置する。

app
 ├
 :
 └ res
   ├ drawable
   ├ layout
   ├ menu
   └ values

resフォルダの構成を簡単に説明すると以下のようになる。

drawable・・・画像ファイルの格納場所。対象の解像度に合わせて、xhdpiやxxhdpiのフォルダも作成する必要がある。

layout・・・画面レイアウトを定義するxmlファイルを格納する。

menu・・・メニュー画面の項目を定義するxmlファイルを格納する。

values・・・文字列を定義するxmlファイル(strings.xml)、色を定義するxmlファイル(colors.xml)、テーマをカスタマイズするxmlファイル(style.xml)、テキストサイズを規定するxmlファイル(dimens.xml)等を格納する。

posted by へっぽ at 21:53 | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

Android Studio 起動時にエラー The environment variable JAVA_HOME does not point to a valid JVM installation.

Android Studio(ver 1.4)起動時に突然以下のエラーが出た。


The environment variable JAVA_HOME (with the value of C:\Program Files\Java\jdk1.7.0_79\bin) does not point to a valid JVM installation.



試行錯誤の結果、環境変数の「bin」を除去すると動いた。

単純にパスが通っていなかったのか?
しかし今まで普通に動いていたのに・・・謎だ。

posted by へっぽ at 00:10 | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

Androidアプリ開発 sqlite3で文字化け

Androidアプリを開発していて、データベースの中身をチェックしたいとき、コマンドプロンプトから sqlite3 を実行することがあると思います。

そんなとき、日本語のデータがデータベースに入っていると、文字化けを起こしてしまうことがあります。

これは sqlite がデータを UTF-8 で格納しているから。

これを回避するには、sqlite3 実行前に、コマンドプロンプトで

================
    chcp 65001
================

を実行しておくことです。

コマンドプロンプトの文字コードが utf-8 に指定され、日本語データも正常に表示されるようになります。

但し chcp 65001 は毎回実行しないといけないので、少々面倒ですが。

posted by へっぽ at 01:00 | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

Androidアプリ開発 layout/main.xmlのcom.google.ads.AdViewでunbound prefixが出る

Androidアプリ開発をしていてAdMobを使うため、layout/main.xmlに次のような記述を入れました。



ところがここで、Eclipseから「unbound prefix」のエラーが…。

どうやらrootとなるLinearLayoutタグに

xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"

を入れる必要があった模様。

入れたら無事エラーは解消しました。

posted by へっぽ at 20:39 | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

Androidアプリ開発 インストールされているパッケージの一覧を出力する

Androidエミュレータにインストールされているパッケージの一覧を出力する方法。

コマンドプロンプトを立ち上げ、

====================================
cd [adb.exeがあるフォルダ]
adb shell pm list package
====================================

を実行する。

posted by へっぽ at 22:20 | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

Androidアプリ開発 画面を縦固定にする

Androidアプリ開発で画面を縦固定にしたい場合。

AndroidManifest.xmlにて、

application/activity 要素の
android:screenOrientation属性を
"portrait"にする。

"landscape"にすると、横固定になるらしい。

posted by へっぽ at 02:11 | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

Androidアプリ開発 コマンドプロンプトでSQLiteDatabaseを参照する

エミュレータでアプリをインストールすることで作成されたテーブルを参照する方法。

コマンドプロンプトから
adb shell
を実行する。
(※エミュレータを起動していないと「error: device not found」が表示されて進めないので注意。)

#
という表記に遷移するので、
# cd data/data/[インストールしたアプリのパッケージ]/databases
と実行する。その後、
# ls
とすれば、作成したデータベースが現れるはずだ。

# sqlite3 [作成したデータベース名]
を実行すると、

sqlite3 [作成したデータベース名]
SQLite version *****
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>

という表記に移る。
あとはselect等で任意のテーブルを参照すれば良い。

posted by へっぽ at 21:46 | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする

Androidアプリ開発 エミュレータからアプリをアンインストールする

一度エミュレータへインストールしたアプリを削除するコマンド。

adb.exeを起動する。
このexeは /android-sdk/platform-tools にあった。

コマンドプロンプトから、
adb uninstall [インストールしたアプリケーションのpackage]
と実行すれば良い。

パスが通っていなければ、adb.exeが存在しているフォルダへcdコマンドへ移動すればOK。
"Success"と表示されれば成功。

posted by へっぽ at 21:41 | TrackBack(0) | Android | このブログの読者になる | 更新情報をチェックする