Q&A
現在、簡単なメモアプリを作成しております。
その際に、Mainとは別のアクティビティで選択したラジオボタンの項目をDB(SQLite)に保存し、画面遷移しても選択された項目をそのままにしたいと思っています。
下記のように実装していますがうまく動作しないのが現状です。
該当箇所に★マークを付けています。
MemoActivity.kt
1package to.msn.wings.onsen_memo_2 2 3import android.app.DatePickerDialog 4import android.app.DatePickerDialog.OnDateSetListener 5import android.content.ContentValues 6import android.media.Rating 7import android.os.Bundle 8import android.view.Menu 9import android.view.MenuItem 10import android.view.View 11import android.widget.* 12import androidx.appcompat.app.AppCompatActivity 13import java.text.FieldPosition 14import java.util.* 15 16class MemoActivity:AppCompatActivity() { 17 18 19 companion object{ 20 private const val TABLE_NAME = "memos" 21 } 22 23 24 25 override fun onCreate(savedInstanceState: Bundle?) { 26 super.onCreate(savedInstanceState) 27 setContentView(R.layout.memo) 28 29 supportActionBar?.setDisplayHomeAsUpEnabled(true) 30 31 val helper = DBHelper(this) 32 val memoId: Long = intent.getLongExtra("id",0) 33 val textTitle = findViewById<EditText>(R.id.text_title) 34 val textContent = findViewById<EditText>(R.id.text_content) 35 val rate = findViewById<RatingBar>(R.id.rating) 36 val textDate = findViewById<EditText>(R.id.text_date) 37 val textonsen = findViewById<EditText>(R.id.text_onsen) 38 val buttononsen = findViewById<Button>(R.id.btn_onsen) 39 val buttonsento = findViewById<Button>(R.id.btn_sento) 40 val rgroup = findViewById<RadioGroup>(R.id.rgroup) ★ 41 42 43 44 if (memoId != 0L) { 45 helper.readableDatabase.use { db -> 46 db.query( 47 TABLE_NAME, 48 arrayOf("id", "title", "content","rating","date","onsen","radio"), 49 "id = ?", 50 arrayOf(memoId.toString()), 51 null, 52 null, 53 null, 54 "1" 55 ) 56 .use { cursor -> 57 if (cursor.moveToFirst()) { 58 textTitle.setText(cursor.getString(1)) 59 textContent.setText(cursor.getString(2)) 60 rate.setRating(cursor.getFloat(3)) 61 textDate.setText(cursor.getString(4)) 62 textonsen.setText(cursor.getString(5)) 63 rgroup.setId(cursor.getInt(6)) ★ 64 } 65 } 66 67 } 68 } 69 70 findViewById<Button>(R.id.save_button).setOnClickListener{ 71 helper.writableDatabase.use { 72 db -> 73 val values = ContentValues().apply { 74 put("title", textTitle.text.toString()) 75 put("Content", textContent.text.toString()) 76 put("rating",rate.rating) 77 put("date",textDate.text.toString()) 78 put("onsen",textonsen.text.toString()) 79 put("radio",rgroup.checkedRadioButtonId) ★ 80 } 81 if (memoId != 0L) { 82 db.update(TABLE_NAME, values,"id = ?", arrayOf(memoId.toString())) 83 } else { 84 db.insert(TABLE_NAME,null, values) 85 } 86 } 87 finish() 88 } 89 }
DBHelper.kt
1package to.msn.wings.onsen_memo_2 2 3import android.content.Context 4import android.database.sqlite.SQLiteDatabase 5import android.database.sqlite.SQLiteOpenHelper 6 7class DBHelper(context: Context?): SQLiteOpenHelper(context,DBNAME,null,version) { 8 companion object{ 9 private const val DBNAME = "DBSample.sqlite" 10 private const val version = 1 11 } 12 13 override fun onCreate(db: SQLiteDatabase?) { 14 db?.let { 15 it.execSQL("create table memos(id integer primary key, title text, content text,rating real,date text,onsen text,radio integer)") 16 } 17 } 18 19 override fun onUpgrade(p0: SQLiteDatabase?, p1: Int, p2: Int) { 20 21 } 22 23 override fun onOpen(db: SQLiteDatabase?) { 24 super.onOpen(db) 25 } 26}
そもそもSQLiteにはラジオボタンから取得したIDを登録できないのか、
また、SQLite書き込みの際に、<RadioGoupe>ではなく、<RadioButton>にID値を投入するのかわからない状況です。
もし何かアドバイス等ありましたらご教授していただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2022/12/07 14:34
2022/12/07 17:58 編集
2022/12/08 03:00