見出し画像

自分だけの英語ノートアプリをつくる(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関連





この記事が気に入ったらサポートをしてみませんか?