自分だけの英語ノートアプリをつくる(android)
今回は、Android Studioで自分だけの英語と日本語訳がまとめられている英語ノート的なアプリを作ってみましょう。
今回作成した実際のアプリ画面
英語と日本語訳を入力して、INSERTボタンを押すと、DBへデータが保存されます。
READを押すと、DBへ保存された全データを読み込みます。
消したい番号を右側のエディットテキストへ入力し、DELETEボタンを押すと、その番号に対応したデータが削除されます。
TESTボタンでは、DBへ保存されたデータがランダムに表示されるのでポチポチおして、復習ができます。
作成したアプリ
Google Play Storeへの公開は準備中
必要な環境
Android Studioのインストール(環境構築)が必要です。下記の記事を参考に環境構築してからご参照ください。
コード全体図
レイアウト関連
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/edit_text_key"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="50dp"
android:autofillHints="@string/hint_key"
android:background="#fff"
android:hint="@string/hint_key"
android:inputType="text"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.088"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/edit_text_value"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
<EditText
android:id="@+id/edit_text_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="50dp"
android:autofillHints="@string/hint_value"
android:background="#fff"
android:hint="@string/hint_value"
android:inputType="text"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.948"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.002" />
<Button
android:id="@+id/button_insert"
android:layout_width="120dp"
android:layout_height="50dp"
android:layout_marginStart="36dp"
android:layout_marginTop="21dp"
android:text="@string/insert"
android:textSize="20sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/edit_text_key" />
<Button
android:id="@+id/button_test"
android:layout_width="120dp"
android:layout_height="50dp"
android:layout_marginStart="36dp"
android:layout_marginTop="12dp"
android:text="@string/test"
android:textSize="20sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button_insert" />
<Button
android:id="@+id/button_read"
android:layout_width="120dp"
android:layout_height="50dp"
android:layout_marginTop="20dp"
android:text="@string/read"
android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.644"
app:layout_constraintStart_toEndOf="@+id/button_insert"
app:layout_constraintTop_toBottomOf="@+id/edit_text_value" />
<Button
android:id="@+id/button_delete"
android:layout_width="120dp"
android:layout_height="50dp"
android:layout_marginTop="12dp"
android:text="@string/delete"
android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.644"
app:layout_constraintStart_toEndOf="@+id/button_test"
app:layout_constraintTop_toBottomOf="@+id/button_read" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="220dp"
android:layout_marginBottom="10dp"
android:isScrollContainer="false"
android:id="@+id/scrollView">
<TextView
android:id="@+id/text_view"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.223"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button_test" />
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
strings.xml
<resources>
<string name="app_name">EnglishApp</string>
<string name="hint_key">ENGLISH</string>
<string name="hint_value">JAPANESE</string>
<string name="insert">insert</string>
<string name="read">read</string>
<string name="delete">delete</string>
<string name="test">test</string>
</resources>
処理関連
MainActivity.java
package com.tamurasann.englishapp;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private TextView textView;
private EditText editTextKey, editTextValue;
private TestOpenHelper helper;
private SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editTextKey = findViewById(R.id.edit_text_key);
editTextValue = findViewById(R.id.edit_text_value);
textView = findViewById(R.id.text_view);
//インサートボタンの処理
Button insertButton = findViewById(R.id.button_insert);
insertButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(helper == null){
helper = new TestOpenHelper(getApplicationContext());
}
if(db == null){
db = helper.getWritableDatabase();
}
String english = editTextKey.getText().toString();
String japanese = editTextValue.getText().toString();
insertData(db, english, japanese);
}
});
//リードボタンの処理
Button readButton = findViewById(R.id.button_read);
readButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
readData();
}
});
//デリートボタンの処理
Button deleteButton = findViewById(R.id.button_delete);
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String japanese = editTextValue.getText().toString();
db.delete("englishdb", "id = "+japanese, null);
}
});
//テストボタンの処理
Button testButton = findViewById(R.id.button_test);
testButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
testData();
}
});
}
//各ボタンのメソッド作成
//リードボタンメソッド
private void readData(){
if(helper == null){
helper = new TestOpenHelper(getApplicationContext());
}
if(db == null){
db = helper.getReadableDatabase();
}
Cursor cursor = db.query(
"englishdb",
new String[] { "id", "eng_word", "jpn_word" },
null,
null,
null,
null,
null
);
cursor.moveToFirst();
StringBuilder sbuilder = new StringBuilder();
for (int i = 0; i < cursor.getCount(); i++) {
sbuilder.append(cursor.getString(0));
sbuilder.append(": ");
sbuilder.append(cursor.getString(1));
sbuilder.append("\n");
sbuilder.append(cursor.getString(2));
sbuilder.append("\n");
sbuilder.append("------------------------------------\n");
cursor.moveToNext();
}
cursor.close();
textView.setText(sbuilder.toString());
}
//インサートボタンのメソッド
private void insertData(SQLiteDatabase db, String eng_word, String jpn_word){
ContentValues values = new ContentValues();
values.put("eng_word", eng_word);
values.put("jpn_word", jpn_word);
db.insert("englishdb", null, values);
}
//テストボタンのメソッド
private void testData(){
if(helper == null){
helper = new TestOpenHelper(getApplicationContext());
}
if(db == null){
db = helper.getReadableDatabase();
}
Cursor cursor = db.query(
"englishdb",
new String[] { "id", "eng_word", "jpn_word" },
null,
null,
null,
null,
"RANDOM() LIMIT 1"
);
cursor.moveToFirst();
StringBuilder sbuilder = new StringBuilder();
sbuilder.append("------------------------------\n");
sbuilder.append(cursor.getString(1));
sbuilder.append("\n");
sbuilder.append(cursor.getString(2));
sbuilder.append("\n");
sbuilder.append("------------------------------");
cursor.moveToNext();
cursor.close();
textView.setText(sbuilder.toString());
}
}
TestOpenHelper.java
package com.tamurasann.englishapp;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class TestOpenHelper extends SQLiteOpenHelper {
// データーベースのバージョン
private static final int DATABASE_VERSION = 4;
// データーベース名
private static final String DATABASE_NAME = "EnglishDB.db";
private static final String TABLE_NAME = "englishdb";
private static final String _ID = "id";
private static final String COLUMN_NAME_ENGLISH = "eng_word";
private static final String COLUMN_NAME_JAPANESE = "jpn_word";
private static final String SQL_CREATE_ENTRIES =
"CREATE TABLE " + TABLE_NAME + " (" +
_ID + " INTEGER PRIMARY KEY," +
COLUMN_NAME_ENGLISH + " TEXT," +
COLUMN_NAME_JAPANESE + " TEXT)";
private static final String SQL_DELETE_ENTRIES =
"DROP TABLE IF EXISTS " + TABLE_NAME;
TestOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(
SQL_CREATE_ENTRIES
);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(
SQL_DELETE_ENTRIES
);
onCreate(db);
}
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
onUpgrade(db, oldVersion, newVersion);
}
}
基本的に上記のコードをコピペしていただければ、同じアプリが作成できます。
過去記事
過去にJava関連の記事も多く記載していますのでぜひご参照ください。
python関連
この記事が気に入ったらサポートをしてみませんか?