MainActivityにてEditTextに入力した内容をSQLiteを使って保存し、別のアクティビティ(output)でListViewで表示することを目指しています。専門書に書かれているコードを参考にしてみたところ、入力した内容の保存や、保存した内容を別アクティビティでListViewを活用して表示する点については実現できました。
しかし、入力した内容が無限に保存されるようになってしまっています。私としては学校の時間割を入力して、別のページで確認できるようにしたいと思っています。たとえば1時間目に「国語」と入れると別のページでは「国語」と表示され、後から内容を修正し「数学」と入れた場合にはデータ内容を変更し、「数学」と表示させたいと考えています。現時点では単純にデータを保存することはできるのですが、特定の部分を修正することができないほか、保存するデータの数を制限(時間割の場合には7つほど)することができません。
初心者なので基本的な部分を見落としているかもしれませんが、アドバイスを頂けたら嬉しいです。
MainActivity.kt import android.content.Intent import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.widget.ArrayAdapter import android.widget.Button import android.widget.EditText import android.widget.ListView class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val button2 = findViewById<Button>(R.id.button2) button2.setOnClickListener { val intent = Intent(this, output::class.java) startActivity(intent) } val button = findViewById<Button>(R.id.button) button.setOnClickListener { val editText = findViewById<EditText>(R.id.editText) val editText2 = findViewById<EditText>(R.id.editText2) val editText3 = findViewById<EditText>(R.id.editText3) insertText(this, editText.text.toString()) insertText(this,editText2.text.toString()) insertText(this, editText3.text.toString()) } } }
SampleDatabase.kt import android.content.ContentValues import android.content.Context import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteOpenHelper private const val DB_NAME = "SampleDatabase" private const val DB_VERSION = 1 class SampleDBOpenHelper(context: Context) : SQLiteOpenHelper(context, DB_NAME, null, DB_VERSION) { override fun onCreate(db: SQLiteDatabase?) { // テーブルの作成 db?.execSQL("CREATE TABLE texts ( " + " _id INTEGER PRIMARY KEY AUTOINCREMENT, " + " text TEXT NOT NULL, " + " created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)") } override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) { // バージョン更新時のSQL発行 } } fun queryTexts(context: Context) : List<String> { // 読み込み用のデータベースを開く val database = SampleDBOpenHelper(context).readableDatabase // データベースから全件検索する val cursor = database.query("texts", null, null, null, null, null, "created_at DESC") val texts = mutableListOf<String>() cursor.use { // カーソルで順次処理していく while(cursor.moveToNext()) { // 保存されているテキストを得る val text = cursor.getString(cursor.getColumnIndex("text")) texts.add(text) } } database.close() return texts } fun insertText(context: Context, text: String) { // 書き込み可能なデータベースを開く val database = SampleDBOpenHelper(context).writableDatabase database.use { db -> // 挿入するカラムと値を作成する val record = ContentValues().apply { // テキスト put("text", text) } // データベースに挿入する db.insert("texts", null, record) } }
output.kt import android.content.Intent import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.widget.ArrayAdapter import android.widget.Button import android.widget.ListView class output : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_output) val backbutton = findViewById<Button>(R.id.button6) backbutton.setOnClickListener { val intent = Intent(this,MainActivity::class.java) startActivity(intent) } fun show() { val texts = queryTexts(this) val listView = findViewById<ListView>(R.id.listview) listView.adapter = ArrayAdapter<String>(this, R.layout.list_item2, R.id.textView2, texts) } show() } }
あなたの回答
tips
プレビュー