# AN25 課題10,11,12 ###### tags: `課題` ## 1 activity_main.xml ```xml= <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="30dip" android:gravity="left"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="キー" /> <EditText android:id="@+id/EditKey" android:layout_width="400dp" android:layout_height="wrap_content" /> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="カテゴリー" /> <EditText android:id="@+id/CategoryKey" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="本文" /> <EditText android:id="@+id/Text" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0.93" android:gravity="top" /> <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" > <Button android:id="@+id/KeyWrite" android:layout_width="70dp" android:layout_height="match_parent" android:onClick="functionKeyWrite" android:text="保存" android:textSize="20sp" /> <Button android:id="@+id/KeyUpdate" android:layout_width="70dp" android:layout_height="match_parent" android:onClick="functionKeyUpdate" android:text="更新" android:textSize="20sp" /> <Button android:id="@+id/KeyClear" android:layout_width="90dp" android:layout_height="match_parent" android:onClick="functionKeyClear" android:text="クリア" android:textSize="20sp" /> <Button android:id="@+id/KeyList" android:layout_width="70dp" android:layout_height="match_parent" android:onClick="functionKeyList" android:text="一覧" android:textSize="20sp" /> <Button android:id="@+id/KeyDelete" android:layout_width="70dp" android:layout_height="match_parent" android:onClick="functionKeyDelete" android:text="削除" android:textSize="20sp" /> </TableRow> </TableLayout> </LinearLayout> ``` list_view.xml ```xml= <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/myTextView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="select a item"/> <Spinner android:id="@+id/mySpinner" android:layout_width="fill_parent" android:layout_height="100dp" android:textSize="30sp"/> <Button android:id="@+id/KeyList" android:layout_width="fill_parent" android:layout_height="wrap_content" android:onClick="functionKeySelect" android:text="検索" android:textSize="20sp" /> <TextView android:id="@+id/mylistTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="30dip" android:textSize="20sp" android:textColor="#FF0000" /> <ListView android:id="@+id/myListView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0.93" /> <Button android:text="戻る" android:layout_width="fill_parent" android:layout_height="wrap_content" android:onClick="buttonMethod" /> </LinearLayout> ``` MainActivity.java ```java= package nhs00650.hal.ac.mylibrary; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import java.util.Calendar; import java.util.Date; import android.view.View; import android.widget.EditText; import android.widget.Toast; import android.database.*; import android.database.sqlite.*; import android.content.Intent; public class MainActivity extends AppCompatActivity { EditText et; EditText ekey; EditText ckey; SQLiteDatabase db; SQLiteDatabase db2; String write_dateStr; int key_flag = 0; String select_key; String id_listshow = ""; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et = (EditText)findViewById(R.id.Text); ekey = (EditText)findViewById(R.id.EditKey); ckey = (EditText)findViewById(R.id.CategoryKey); //↓は一度実効したあとコメントアウトしなおす //first_database(); //インテントからキーを取得 Bundle extras = getIntent().getExtras(); if(extras != null){ select_key = extras.getString("select_key"); id_listshow = extras.getString("id_primary"); String dbStr = "data/data/" + getPackageName() + "/nhs00650db"; db = SQLiteDatabase.openOrCreateDatabase(dbStr,null); String query_read = "SELECT * FROM memopad WHERE id = '" + id_listshow + "'"; System.out.println(query_read); Cursor db_row = db.rawQuery(query_read,null); int id = 0; String keyword = ""; String memo = ""; Toast toast_read; String category = ""; while (db_row.moveToNext()){ key_flag = 1; int index_id = db_row.getColumnIndex("id"); int index_keyword = db_row.getColumnIndex("keyword"); int index_memo = db_row.getColumnIndex("memo"); int index_category = db_row.getColumnIndex("category"); id = db_row.getInt(index_id); keyword = db_row.getString(index_keyword); memo = db_row.getString(index_memo); category = db_row.getString(index_category); } //intのidをString変換 String id_str = String.valueOf(id); //一覧から取得した主キーを基にキーワードとメモ表示 ekey.setText(keyword); et.setText(memo); ckey.setText(category); //Toastで表示 if(key_flag == 0) { toast_read = Toast.makeText(this, "指定されたキーはありません", Toast.LENGTH_SHORT); toast_read.show(); } else { toast_read = Toast.makeText(this, id_str + "の内容を読み込みました", Toast.LENGTH_SHORT); toast_read.show(); } key_flag = 0; } } public void functionKeyList(View v){ //「一覧」のSQL String dbStr = "data/data/" + getPackageName() + "/nhs00650db"; db = SQLiteDatabase.openOrCreateDatabase(dbStr,null); String query_list = "SELECT * FROM memopad"; System.out.println(query_list); Cursor db_row = db.rawQuery(query_list,null); System.out.println(db_row); String keyword = ""; String write_date = ""; //ListShow.javaで一覧表示するためのデータ格納 String id_continue = ""; String keyword_continue = ""; String keywordanddate_continue = ""; //,区切りのデータ作成 id,keyword,memo,write_date while (db_row.moveToNext()){ int index_id = db_row.getColumnIndex("id"); int index_keyword = db_row.getColumnIndex("keyword"); int index_write_date = db_row.getColumnIndex("write_date"); int id = db_row.getInt(index_id); keyword = db_row.getString(index_keyword); write_date = db_row.getString(index_write_date); //id(int)をString変換 String id_str = String.valueOf(id); //ID if(id_continue != ""){ id_continue += "," + id_str; }else { id_continue += id_str; } //キーワード if(keyword_continue != ""){ keyword_continue += "," + keyword; }else { keyword_continue += keyword; } //キーワード+日付 if(keywordanddate_continue != ""){ keywordanddate_continue += "," + keyword + " " + write_date; }else { keywordanddate_continue += keyword + " " + write_date; } } //ListViewアクティビティを起動 Intent result_act = new Intent(MainActivity.this, ListShow.class); result_act.putExtra("id_continue",id_continue); result_act.putExtra("keywordanddate_continue",keywordanddate_continue); startActivity(result_act); } //「保存」(書き込み)のSQL public void functionKeyWrite(View v){ //「保存」のSQL String key = ekey.getText().toString(); String text = et.getText().toString(); String keyc = ckey.getText().toString(); String dbStr = "data/data/" + getPackageName() + "/nhs00650db"; db = SQLiteDatabase.openOrCreateDatabase(dbStr,null); write_dateStr = now_date(); String query_read = "SELECT * FROM memopad WHERE keyword = '" + key + "'"; String query_insert = "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('" + key + "','" + text + "','" + write_dateStr + "','" + keyc + "')"; Cursor db_row = db.rawQuery(query_read,null); db.execSQL(query_insert); System.out.println(query_insert); Toast toast_save; //Toastで表示 toast_save = Toast.makeText(this, key + "をキーに書き込みました", Toast.LENGTH_SHORT); toast_save.show(); key_flag = 0; } //本文クリア public void functionKeyClear(View v){ //「クリア」のSQL et.getEditableText().clear(); } //削除 public void functionKeyDelete(View v){ //「削除」のSQL String key = ekey.getText().toString(); String dbStr = "data/data/" + getPackageName() + "/nhs00650db"; db = SQLiteDatabase.openOrCreateDatabase(dbStr,null); db2 = SQLiteDatabase.openOrCreateDatabase(dbStr,null); String query_read = "SELECT * FROM memopad WHERE keyword = '" + key + "'"; Cursor db_row = db.rawQuery(query_read,null); while (db_row.moveToNext()){ key_flag = 1; ekey.getEditableText().clear(); et.getEditableText().clear(); } String query_delete = "DELETE FROM memopad WHERE keyword = '" + key + "'"; db2.execSQL(query_delete); Toast toast_delete; //Toastで表示 if(key_flag == 0) { toast_delete = Toast.makeText(this, "指定されたキーはありません", Toast.LENGTH_SHORT); toast_delete.show(); } else { toast_delete = Toast.makeText(this, key + "を削除しました", Toast.LENGTH_SHORT); toast_delete.show(); } key_flag = 0; } public void functionKeyUpdate(View KeyUpdate){ int count = 0; String ekeyStr = ekey.getText().toString(); String etStr = et.getText().toString(); String query_count = "SELECT * FROM memopad WHERE keyword = '" + ekeyStr + "'"; Cursor db_row = db.rawQuery(query_count, null); write_dateStr = now_date(); while (db_row.moveToNext()) { int index_key = db_row.getColumnIndex("keyword"); String key = db_row.getString(index_key); if(key.equals(ekeyStr)){ count = 1; break; } else { count = 0; } } if(count == 1){ String query_record_update = "UPDATE memopad SET memo = '" + etStr + "', write_date = '" + write_dateStr +"' WHERE keyword = '" + ekeyStr + "'"; db.execSQL(query_record_update); Toast myToast = Toast.makeText(this, ekeyStr + "を更新しました", Toast.LENGTH_SHORT); myToast.show(); } else if(count == 0){ Toast myToast = Toast.makeText(this, "指定されたキーはありません", Toast.LENGTH_SHORT); myToast.show(); } } //初期にデータベース動かすコード private void first_database(){ //データベースを作成 String dbStr = "data/data/" + getPackageName() + "/nhs00650db"; db = SQLiteDatabase.openOrCreateDatabase(dbStr,null); //テーブル作成用のクエリ文 String query_table1 = "DROP TABLE IF EXISTS memopad"; String query_table2 = "CREATE TABLE memopad(id INTEGER PRIMARY KEY AUTOINCREMENT," + "keyword TEXT,memo TEXT,write_date TEXT, category TEXT)"; //テーブルの作成 db.execSQL(query_table1); db.execSQL(query_table2); //レコード追加 write_dateStr = now_date();//本日日付取得 String query_record_set[] = { "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('入門Python3','オライリーのPython本','" + write_dateStr +"', 'Python')", "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('Pythonチュートリアル','Pythonのチュートリアル','" + write_dateStr +"', 'Python')", "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('分かるPython','Pythonの基本','" + write_dateStr +"', 'Python')", "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('今時のプログラマーのためのReact','Reactの基本','" + write_dateStr +"', 'React')", "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('React実践の教科書','React実践編','" + write_dateStr +"', 'React')", "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('Pythonによるデータ分析の教科書','データ分析初心者','" + write_dateStr +"', 'AI')", "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('Pythonによるデータ分析入門','データ分析入門','" + write_dateStr +"', 'AI')", "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('Kaggle入門','kaggle初心者','" + write_dateStr +"', 'AI')", "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('データ分析の技術','データ分析応用・実践編','" + write_dateStr +"', 'AI')", "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('zero to one','君に何ができるのか','" + write_dateStr +"', 'Tech本')", "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('隷属なき道','ベーシックインカムとテクノロジー','" + write_dateStr +"', 'Tech本')", "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('AIは人間を超えるのか','人工知能についての本','" + write_dateStr +"', 'Tech本')", "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('Airbnb story','Airbnbの創業秘話','" + write_dateStr +"', 'Tech本')" }; for (int i=0; i<query_record_set.length; i++){ db.execSQL(query_record_set[i]); } } //本日の日付を返すメソッド private String now_date(){ //現在日取得 Date today = new Date(); //Calendarクラスオブジェクト生成 Calendar cal = Calendar.getInstance(); //Calendarオブジェクトに現在日付設定 cal.setTime(today); //年月日時分秒所得 int yy = cal.get(Calendar.YEAR); int mm = cal.get(Calendar.MONTH) + 1; int dd = cal.get(Calendar.DATE); int hour = cal.get(Calendar.HOUR); int minute = cal.get(Calendar.MINUTE); int second = cal.get(Calendar.SECOND); String now_dateStr = yy + "/" + mm + "/" + dd + " " + hour + ":" + minute + ":" + second; return now_dateStr; } } ``` ListShow.java ```java= package nhs00650.hal.ac.mylibrary; import androidx.appcompat.app.AppCompatActivity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import android.content.Intent; import android.widget.Spinner; public class ListShow extends AppCompatActivity{ private TextView List_title; private ListView List_View; String[] listKey; String[] id_primary; String[] keywordanddate; private TextView aTextView; private Spinner aSpinner; String ss = ""; private String[] listStrings = { "Python", "React", "AI", "Tech本" }; SQLiteDatabase db; String[] selectlist; int index_id_p; int id_p; String keyword = ""; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.list_view); //IDから目的のウィジェットを得る List_title = (TextView)findViewById(R.id.mylistTitle); List_View= (ListView)findViewById(R.id.myListView); aTextView = (TextView)findViewById(R.id.myTextView); aSpinner = (Spinner)findViewById(R.id.mySpinner); ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, listStrings); aSpinner.setAdapter(myAdapter); aSpinner.setOnItemSelectedListener( new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View v, int position, long id) { Spinner spinner = (Spinner) parent; ss = (String) spinner.getSelectedItem(); aTextView.setText(String.format(" %s selected", ss)); } public void onNothingSelected(AdapterView<?> parent){ } } ); //インテントからキーを取得 Bundle extras = getIntent().getExtras(); if(extras != null){ String id_continue = extras.getString("id_continue"); String keywordanddate_continue = extras.getString("keywordanddate_continue"); id_primary = id_continue.split(","); keywordanddate = keywordanddate_continue.split(","); } //リストに表示する名称 //ヘッダ設定 String head_title = "メモ一覧(" + keywordanddate.length + "件)"; List_title.setText(head_title); //リストアダプタを作成 ArrayAdapter<String> myAdapter2 = new ArrayAdapter<String>( this,android.R.layout.simple_list_item_1,keywordanddate); //リストアダプタをリストビューにセット List_View.setAdapter(myAdapter2); //リスト選択処理 List_View.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick( AdapterView<?> parent,View v,int position, long id){ Log.d("onItemClick","position:" + String.valueOf(position)); String select_key = id_primary[position]; //int listshow_flag = 1; //ListShowアクティビティを起動 Intent result_act = new Intent(ListShow.this, MainActivity.class); result_act.putExtra("select_key",select_key); result_act.putExtra("id_primary",id_primary[position]); startActivity(result_act); } }); } public void functionKeySelect(View v) { //「一覧」のSQL String dbStr = "data/data/" + getPackageName() + "/nhs00650db"; db = SQLiteDatabase.openOrCreateDatabase(dbStr, null); String query_list = "SELECT * FROM memopad WHERE category = '" + ss + "'"; System.out.println(query_list); Cursor db_row = db.rawQuery(query_list, null); System.out.println(db_row); String write_date = ""; //ListShow.javaで一覧表示するためのデータ格納 String id_continue = ""; String keyword_continue = ""; String keywordanddate_continue = ""; //,区切りのデータ作成 id,keyword,memo,write_date while (db_row.moveToNext()) { index_id_p = db_row.getColumnIndex("id"); int index_keyword = db_row.getColumnIndex("keyword"); int index_write_date = db_row.getColumnIndex("write_date"); id_p = db_row.getInt(index_id_p); keyword = db_row.getString(index_keyword); write_date = db_row.getString(index_write_date); //id(int)をString変換 String id_str = String.valueOf(id_p); //ID if (id_continue != "") { id_continue += "," + id_str; } else { id_continue += id_str; } //キーワード if (keyword_continue != "") { keyword_continue += "," + keyword; } else { keyword_continue += keyword; } //キーワード+日付 if (keywordanddate_continue != "") { keywordanddate_continue += "," + keyword + " " + write_date; } else { keywordanddate_continue += keyword + " " + write_date; } id_primary = id_continue.split(","); } selectlist = keywordanddate_continue.split(","); String head_title = ss +"メモ一覧(" + selectlist.length + "件)"; List_title.setText(head_title); ArrayAdapter<String> myAdapter2 = new ArrayAdapter<String>( this,android.R.layout.simple_list_item_1,selectlist); //リストアダプタをリストビューにセット List_View.setAdapter(myAdapter2); List_View.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick( AdapterView<?> parent,View v,int position, long id){ Log.d("onItemClick","position:" + String.valueOf(position)); String select_key = id_primary[position]; //ListShowアクティビティを起動 Intent result_act = new Intent(ListShow.this, MainActivity.class); result_act.putExtra("select_key",select_key); result_act.putExtra("id_primary",id_primary[position]); startActivity(result_act); } }); } //ボタンの処理 public void buttonMethod(View myButton){ Intent result_act = new Intent(ListShow.this, MainActivity.class); startActivity(result_act); } } ``` AndroidManifest.xml ```xml= <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="nhs00650.hal.ac.mylibrary"> <application android:allowBackup="true" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:testOnly="true" android:theme="@style/AppTheme" > <activity android:name="nhs00650.hal.ac.mylibrary.MainActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="nhs00650.hal.ac.mylibrary.ListShow" android:label="@string/app_name" > </activity> </application> </manifest> ``` ## 改訂版 改善点 - 保存を押したときすでに存在するキーでも保存できてしまう問題を解決 - 更新ボタンが使えるようにした - スピナーでカテゴリを選択できるように変更 - リストで0件の場合でも1件と表示されてしまう問題を解決 (AndroidManifest.xmlは上と同じ感じ) それぞれが変更する場所 - .javaのパッケージ名 - MainActivity.java20行目くらいにあるliststringsの内容 - MainActivity.javaの100行目くらいにあるif文の内容 - ListShow.javaの20行目くらいにあるliststringsの内容 activity_main.xml ```xml= <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="30dip" android:gravity="left"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="キー" /> <EditText android:id="@+id/EditKey" android:layout_width="400dp" android:layout_height="wrap_content" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="30dip" android:gravity="left"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="カテゴリー" /> <Spinner android:id="@+id/mySpinner" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="本文" /> <EditText android:id="@+id/Text" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0.93" android:gravity="top" /> <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" > <Button android:id="@+id/KeyWrite" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:onClick="functionKeyWrite" android:text="保存" android:textSize="20sp" /> <Button android:id="@+id/KeyUpdate" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:onClick="functionKeyUpdate" android:text="更新" android:textSize="20sp" /> <Button android:id="@+id/KeyClear" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:onClick="functionKeyClear" android:text="クリア" android:textSize="20sp" /> <Button android:id="@+id/KeyList" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:onClick="functionKeyList" android:text="一覧" android:textSize="20sp" /> <Button android:id="@+id/KeyDelete" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:onClick="functionKeyDelete" android:text="削除" android:textSize="20sp" /> </TableRow> </TableLayout> </LinearLayout> ``` list_view.xml ```xml= <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Spinner android:id="@+id/mySpinner" android:layout_width="fill_parent" android:layout_height="80dp" android:textSize="20sp"/> <Button android:id="@+id/KeyList" android:layout_width="fill_parent" android:layout_height="wrap_content" android:onClick="functionKeySelect" android:text="検索" android:textSize="20sp" /> <TextView android:id="@+id/mylistTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="30dip" android:textSize="20sp" android:textColor="#FF0000" /> <ListView android:id="@+id/myListView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0.93" /> <Button android:text="戻る" android:layout_width="fill_parent" android:layout_height="wrap_content" android:onClick="buttonMethod" /> </LinearLayout> ``` MainActivity.java ```java= package nhs00402.hal.ac.mylibrary2; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import java.util.Calendar; import java.util.Date; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.Spinner; import android.widget.Toast; import android.database.*; import android.database.sqlite.*; import android.content.Intent; public class MainActivity extends AppCompatActivity { EditText et; EditText ekey; Spinner spkey; SQLiteDatabase db; SQLiteDatabase db2; String write_dateStr; int key_flag = 0; int index = 0; String keyc = ""; String select_key; String id_listshow = ""; private String[] listStrings = { "tops", "outer", "bottoms", "onepiece", "shoes", "bag", "komono" }; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et = (EditText)findViewById(R.id.Text); ekey = (EditText)findViewById(R.id.EditKey); spkey=(Spinner)findViewById(R.id.mySpinner); //↓は一度実効したあとコメントアウトしなおす //first_database(); //スピナーの値の取得 ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, listStrings); spkey.setAdapter(myAdapter); spkey.setOnItemSelectedListener( new AdapterView.OnItemSelectedListener(){ public void onItemSelected(AdapterView<?> parent, View v, int position, long id){ Spinner spinner = (Spinner) parent; keyc = (String) spinner.getSelectedItem(); } public void onNothingSelected(AdapterView<?> parent){ } }); //インテントからキーを取得 Bundle extras = getIntent().getExtras(); if(extras != null){ select_key = extras.getString("select_key"); id_listshow = extras.getString("id_primary"); String dbStr = "data/data/" + getPackageName() + "/nhs00650db"; db = SQLiteDatabase.openOrCreateDatabase(dbStr,null); String query_read = "SELECT * FROM memopad WHERE id = '" + id_listshow + "'"; System.out.println(query_read); Cursor db_row = db.rawQuery(query_read,null); int id = 0; String keyword = ""; String memo = ""; Toast toast_read; String category = ""; while (db_row.moveToNext()){ key_flag = 1; int index_id = db_row.getColumnIndex("id"); int index_keyword = db_row.getColumnIndex("keyword"); int index_memo = db_row.getColumnIndex("memo"); int index_category = db_row.getColumnIndex("category"); id = db_row.getInt(index_id); keyword = db_row.getString(index_keyword); memo = db_row.getString(index_memo); category = db_row.getString(index_category); } //intのidをString変換 String id_str = String.valueOf(id); //カテゴリに数字をあてる if(category.equals("tops")){ index = 0; } else if (category.equals("outer")){ index = 1; } else if (category.equals("bottoms")){ index = 2; } else if (category.equals("onepiece")){ index = 3; } else if (category.equals("shoes")){ index = 4; } else if (category.equals("bag")){ index = 5; } else if (category.equals("komono")){ index = 6; } else { index = 4; } //カテゴリの初期値 spkey.setSelection(index); //一覧から取得した主キーを基にキーワードとメモ表示 ekey.setText(keyword); et.setText(memo); //Toastで表示 if(key_flag == 0) { toast_read = Toast.makeText(this, "指定されたキーはありません", Toast.LENGTH_SHORT); toast_read.show(); } else { toast_read = Toast.makeText(this, "<" + keyword + ">の内容を読み込みました", Toast.LENGTH_SHORT); toast_read.show(); } key_flag = 0; } } public void functionKeyList(View v){ //「一覧」のSQL String dbStr = "data/data/" + getPackageName() + "/nhs00650db"; db = SQLiteDatabase.openOrCreateDatabase(dbStr,null); String query_list = "SELECT * FROM memopad"; System.out.println(query_list); Cursor db_row = db.rawQuery(query_list,null); System.out.println(db_row); String keyword = ""; String write_date = ""; //ListShow.javaで一覧表示するためのデータ格納 String id_continue = ""; String keyword_continue = ""; String keywordanddate_continue = ""; //,区切りのデータ作成 id,keyword,memo,write_date while (db_row.moveToNext()){ int index_id = db_row.getColumnIndex("id"); int index_keyword = db_row.getColumnIndex("keyword"); int index_write_date = db_row.getColumnIndex("write_date"); int id = db_row.getInt(index_id); keyword = db_row.getString(index_keyword); write_date = db_row.getString(index_write_date); //id(int)をString変換/ String id_str = String.valueOf(id); //ID if(id_continue != ""){ id_continue += "," + id_str; }else { id_continue += id_str; } //キーワード if(keyword_continue != ""){ keyword_continue += "," + keyword; }else { keyword_continue += keyword; } //キーワード+日付 if(keywordanddate_continue != ""){ keywordanddate_continue += "," + keyword + " " + write_date; }else { keywordanddate_continue += keyword + " " + write_date; } } //ListViewアクティビティを起動 Intent result_act = new Intent(MainActivity.this, ListShow.class); result_act.putExtra("id_continue",id_continue); result_act.putExtra("keywordanddate_continue",keywordanddate_continue); startActivity(result_act); } //「保存」(書き込み)のSQL public void functionKeyWrite(View v){ //「保存」のSQL String key = ekey.getText().toString(); String text = et.getText().toString(); // String keyc = ckey.getText().toString(); String dbStr = "data/data/" + getPackageName() + "/nhs00650db"; db = SQLiteDatabase.openOrCreateDatabase(dbStr,null); write_dateStr = now_date(); String query_read = "SELECT * FROM memopad WHERE keyword = '" + key + "'"; String query_insert = "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('" + key + "','" + text + "','" + write_dateStr + "','" + keyc + "')"; Cursor db_row = db.rawQuery(query_read,null); Toast toast_save; Toast toast_notsave; //Toastで表示 toast_save = Toast.makeText(this, key + "をキーに書き込みました", Toast.LENGTH_SHORT); toast_notsave = Toast.makeText(this, key + "はすでに存在します", Toast.LENGTH_SHORT); if (db_row.moveToFirst()){ toast_notsave.show(); } else{ db.execSQL(query_insert); toast_save.show(); // System.out.println(query_insert); } key_flag = 0; } //本文クリア public void functionKeyClear(View v){ //「クリア」のSQL et.getEditableText().clear(); } //削除 public void functionKeyDelete(View v){ //「削除」のSQL String key = ekey.getText().toString(); String dbStr = "data/data/" + getPackageName() + "/nhs00650db"; db = SQLiteDatabase.openOrCreateDatabase(dbStr,null); db2 = SQLiteDatabase.openOrCreateDatabase(dbStr,null); String query_read = "SELECT * FROM memopad WHERE keyword = '" + key + "'"; Cursor db_row = db.rawQuery(query_read,null); while (db_row.moveToNext()){ key_flag = 1; ekey.getEditableText().clear(); et.getEditableText().clear(); } String query_delete = "DELETE FROM memopad WHERE keyword = '" + key + "'"; db2.execSQL(query_delete); Toast toast_delete; //Toastで表示 if(key_flag == 0) { toast_delete = Toast.makeText(this, "指定されたキーはありません", Toast.LENGTH_SHORT); toast_delete.show(); } else { toast_delete = Toast.makeText(this, key + "を削除しました", Toast.LENGTH_SHORT); toast_delete.show(); } key_flag = 0; } //更新のSQL public void functionKeyUpdate(View KeyUpdate){ String key = ekey.getText().toString(); String text = et.getText().toString(); // String keyc = ckey.getText().toString(); String dbStr = "data/data/" + getPackageName() + "/nhs00650db"; db = SQLiteDatabase.openOrCreateDatabase(dbStr,null); write_dateStr = now_date(); String query_read = "SELECT * FROM memopad WHERE keyword = '" + key + "'"; String query_update = "UPDATE memopad SET memo = '" + text + "', write_date = '" + write_dateStr +"', category = '" + keyc +"' WHERE keyword = '" + key + "'"; Cursor db_row = db.rawQuery(query_read,null); Toast toast_update; Toast toast_notupdate; //Toastで表示 toast_update = Toast.makeText(this, key + "を更新しました", Toast.LENGTH_SHORT); toast_notupdate = Toast.makeText(this, "指定されたキーはありません", Toast.LENGTH_SHORT); if (db_row.moveToFirst()){ db.execSQL(query_update); toast_update.show(); } else{ toast_notupdate.show(); // System.out.println(query_insert); } key_flag = 0; } //初期にデータベース動かすコード private void first_database(){ //データベースを作成 String dbStr = "data/data/" + getPackageName() + "/nhs00650db"; db = SQLiteDatabase.openOrCreateDatabase(dbStr,null); //テーブル作成用のクエリ文 String query_table1 = "DROP TABLE IF EXISTS memopad"; String query_table2 = "CREATE TABLE memopad(id INTEGER PRIMARY KEY AUTOINCREMENT," + "keyword TEXT,memo TEXT,write_date TEXT, category TEXT)"; //テーブルの作成 db.execSQL(query_table1); db.execSQL(query_table2); //レコード追加 write_dateStr = now_date();//本日日付取得 String query_record_set[] = { "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('パーカー','白、GU','" + write_dateStr +"', 'tops')", "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('ニットスウェット','白、spiralgirl','" + write_dateStr +"', 'tops')", "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('スニーカー','黒、Reebok','" + write_dateStr +"', 'shoes')", "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('ニットワンピ','グレー、spiralgirl','" + write_dateStr +"', 'onepiece')", "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('ダウン','黒、革、spiralgirl','" + write_dateStr +"', 'outer')", "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('マーメイドスカート','黒、GRL','" + write_dateStr +"', 'bottoms')", "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('リュック','黒、不明','" + write_dateStr +"', 'bag')", "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('マフラー','チェック柄、妹からのプレゼント','" + write_dateStr +"', 'komono')", "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('手袋','チェック柄、友達からのプレゼント','" + write_dateStr +"', 'komono')", "INSERT INTO memopad(keyword,memo,write_date,category) VALUES('スキニー','黒、GU','" + write_dateStr +"', 'bottoms')" }; for (int i=0; i<query_record_set.length; i++){ db.execSQL(query_record_set[i]); } } //本日の日付を返すメソッド private String now_date(){ //現在日取得 Date today = new Date(); //Calendarクラスオブジェクト生成 Calendar cal = Calendar.getInstance(); //Calendarオブジェクトに現在日付設定 cal.setTime(today); //年月日時分秒所得 int yy = cal.get(Calendar.YEAR); int mm = cal.get(Calendar.MONTH) + 1; int dd = cal.get(Calendar.DATE); int hour = cal.get(Calendar.HOUR); int minute = cal.get(Calendar.MINUTE); int second = cal.get(Calendar.SECOND); String now_dateStr = yy + "/" + mm + "/" + dd + " " + hour + ":" + minute + ":" + second; return now_dateStr; } } ``` ListShow.java ```java= package nhs00402.hal.ac.mylibrary2; import androidx.appcompat.app.AppCompatActivity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import android.content.Intent; import android.widget.Spinner; public class ListShow extends AppCompatActivity{ private TextView List_title; private ListView List_View; String[] listKey; String[] id_primary; String[] keywordanddate; private TextView aTextView; private Spinner aSpinner; String ss = ""; private String[] listStrings = { "tops", "outer", "bottoms", "onepiece", "shoes", "bag", "komonno" }; SQLiteDatabase db; String[] selectlist; int index_id_p; int id_p; String keyword = ""; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.list_view); //IDから目的のウィジェットを得る List_title = (TextView)findViewById(R.id.mylistTitle); List_View= (ListView)findViewById(R.id.myListView); // aTextView = (TextView)findViewById(R.id.myTextView); aSpinner = (Spinner)findViewById(R.id.mySpinner); ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, listStrings); aSpinner.setAdapter(myAdapter); aSpinner.setOnItemSelectedListener( new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View v, int position, long id) { Spinner spinner = (Spinner) parent; ss = (String) spinner.getSelectedItem(); // aTextView.setText(String.format(" %s selected", ss)); } public void onNothingSelected(AdapterView<?> parent){ } } ); //インテントからキーを取得 Bundle extras = getIntent().getExtras(); if(extras != null){ String id_continue = extras.getString("id_continue"); String keywordanddate_continue = extras.getString("keywordanddate_continue"); id_primary = id_continue.split(","); keywordanddate = keywordanddate_continue.split(","); } //リストに表示する名称 //ヘッダ設定 String head_title = "メモ一覧(" + keywordanddate.length + "件)"; List_title.setText(head_title); //リストアダプタを作成 ArrayAdapter<String> myAdapter2 = new ArrayAdapter<String>( this,android.R.layout.simple_list_item_1,keywordanddate); //リストアダプタをリストビューにセット List_View.setAdapter(myAdapter2); //リスト選択処理 List_View.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick( AdapterView<?> parent,View v,int position, long id){ Log.d("onItemClick","position:" + String.valueOf(position)); String select_key = id_primary[position]; //int listshow_flag = 1; //ListShowアクティビティを起動 Intent result_act = new Intent(ListShow.this, MainActivity.class); result_act.putExtra("select_key",select_key); result_act.putExtra("id_primary",id_primary[position]); startActivity(result_act); } }); } public void functionKeySelect(View v) { //「一覧」のSQL String dbStr = "data/data/" + getPackageName() + "/nhs00650db"; db = SQLiteDatabase.openOrCreateDatabase(dbStr, null); String query_list = "SELECT * FROM memopad WHERE category = '" + ss + "'"; System.out.println(query_list); Cursor db_row = db.rawQuery(query_list, null); System.out.println(db_row); String write_date = ""; //ListShow.javaで一覧表示するためのデータ格納 String id_continue = ""; String keyword_continue = ""; String keywordanddate_continue = ""; //,区切りのデータ作成 id,keyword,memo,write_date while (db_row.moveToNext()) { index_id_p = db_row.getColumnIndex("id"); int index_keyword = db_row.getColumnIndex("keyword"); int index_write_date = db_row.getColumnIndex("write_date"); id_p = db_row.getInt(index_id_p); keyword = db_row.getString(index_keyword); write_date = db_row.getString(index_write_date); //id(int)をString変換 String id_str = String.valueOf(id_p); //ID if (id_continue != "") { id_continue += "," + id_str; } else { id_continue += id_str; } //キーワード if (keyword_continue != "") { keyword_continue += "," + keyword; } else { keyword_continue += keyword; } //キーワード+日付 if (keywordanddate_continue != "") { keywordanddate_continue += "," + keyword + " " + write_date; } else { keywordanddate_continue += keyword + " " + write_date; } id_primary = id_continue.split(","); } selectlist = keywordanddate_continue.split(","); String head_title; if (db_row.moveToFirst()){ head_title = ss +"一覧(" + selectlist.length + "件)"; } else { head_title = ss +"一覧(0件)"; } List_title.setText(head_title); ArrayAdapter<String> myAdapter2 = new ArrayAdapter<String>( this,android.R.layout.simple_list_item_1,selectlist); //リストアダプタをリストビューにセット List_View.setAdapter(myAdapter2); List_View.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick( AdapterView<?> parent,View v,int position, long id){ Log.d("onItemClick","position:" + String.valueOf(position)); String select_key = id_primary[position]; //ListShowアクティビティを起動 Intent result_act = new Intent(ListShow.this, MainActivity.class); result_act.putExtra("select_key",select_key); result_act.putExtra("id_primary",id_primary[position]); startActivity(result_act); } }); } //ボタンの処理 public void buttonMethod(View myButton){ Intent result_act = new Intent(ListShow.this, MainActivity.class); startActivity(result_act); } } ``` ## 雑談 (0→やまぴ 1→みや 2→やすい 3→りょうくん 4→アミカ 5→やの 6→山田) --- <span style="color: #ff3333">aaa</span> <span style="text-decoration: underline">aaa</span>