sqlite - 如何在 AndroidStudio(Kotlin) 中连接数据库?
问题描述
package org.techtown.testrecyclerview.recommend
import android.content.Context
import android.content.Intent
import android.database.sqlite.SQLiteDatabase
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Filterable
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import org.techtown.testrecyclerview.DBHelper
import org.techtown.testrecyclerview.R
import org.techtown.testrecyclerview.search.FoodData
class RecommendFoodAdapter (val context: Context, var foodList: ArrayList<FoodData>) :
RecyclerView.Adapter<RecommendFoodAdapter.CustomViewHolder>() {
lateinit var dbHelper : DBHelper
lateinit var db : SQLiteDatabase
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.recommend_row_item, parent, false)
return CustomViewHolder(view)
}
override fun onBindViewHolder(holder: CustomViewHolder, position: Int) {
//holder.bind(foodList[position], context)
val item = foodList[position]
holder.itemView.setOnClickListener {
itemClickListner.onClick(it,position)
}
holder.apply {
bind(item,context)
}
}
override fun getItemCount(): Int {
return foodList.size
}
interface OnItemClickListner {
fun onClick(v:View, position: Int)
}
private lateinit var itemClickListner: OnItemClickListner
fun setItemClickListner(itemClickListner: OnItemClickListner) {
this.itemClickListner = itemClickListner
}
class CustomViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val foodTitle = itemView.findViewById<TextView>(R.id.titleTv)
val kcalTv = itemView.findViewById<TextView>(R.id.kcalTv)
val nutri1 = itemView.findViewById<TextView>(R.id.nutri1)
val nutri2 = itemView.findViewById<TextView>(R.id.nutri2)
val nutri3 = itemView.findViewById<TextView>(R.id.nutri3)
val thumbUp = itemView.findViewById<ImageView>(R.id.thumbUpIv)
val thumbDown = itemView.findViewById<ImageView>(R.id.thumbDownIv)
var thumbCount = 0
var thumbUpClicked : Boolean = false
var thumbDownClicked : Boolean = false
fun bind (foodData:FoodData, context: Context) {
dbHelper = DBHelper(context, "food_nutri.db", null, 1)
/* 나머지 TextView와 String 데이터를 연결한다. */
foodTitle.text = foodData.foodName
kcalTv.text = foodData.calorie.toString()+" | "+foodData.amount.toString()+"g 기준"
nutri1.text = foodData.nutri1.toString()+"g"
nutri2.text = foodData.nutri2.toString()+"g"
nutri3.text = foodData.nutri3.toString()+"g"
thumbUp.setOnClickListener {
if (thumbUpClicked == true && thumbDownClicked == false) {
thumbCount--
thumbUpClicked = false
thumbUp.setImageResource(R.drawable.icons8_thumbs_up_24)
dbHelper.updatePriorityDown("해물찜")
} else if (thumbUpClicked == false && thumbDownClicked == false) {
thumbCount++
thumbUpClicked = true
thumbUp.setImageResource(R.drawable.icons8_thumbs_up_filled_24)
dbHelper.updatePriorityUp("해물찜")
}
}
thumbDown.setOnClickListener {
if (thumbUpClicked == false && thumbDownClicked == true) {
thumbCount++
thumbDownClicked = false
thumbDown.setImageResource(R.drawable.icons8_thumbs_down_24)
dbHelper.updatePriorityUp(foodData.foodName)
}
else if (thumbUpClicked == false && thumbDownClicked == false) {
thumbCount--
thumbDownClicked = true
thumbDown.setImageResource(R.drawable.icons8_thumbs_down_filled_24)
dbHelper.updatePriorityDown(foodData.foodName)
}
}
}
}
}
嗨,我正在学习 Android Studio,我有一个问题。
在 CustomViewHolder 类中,我想连接 sqlite DB,但是“dbHelper = DBHelper(context, "food_nutri.db", null, 1)" 不起作用。在另一个 kotlin 类中,上面的 "dbHelper = DBHelper(context, "food_nutri.db", null, 1)" 效果很好,而在这个类中,它不起作用。我不知道为什么,请帮助我。
解决方案
推荐阅读
- vb.net - DataTable.GetChanges() 未按预期工作
- java - 使用 JSONPath 遍历大型 JSON 数组
- javascript - Sharing Variables Between Files (Without Globals)
- cgal - 是否可以将 Projection_traits_xy_3 适配器与“2D Polyline Simplification”包一起使用来简化 CGAL 的 2.5D 多段线?
- python - 数据框中特定列的乘法
- python - 无法在条目小部件上设置焦点()
- webpack - 我们是否应该关注 nativescript 共享代码库中 node_modules 文件夹的大小?
- ionic-framework - Xcode 更新后要模拟的问题
- java - JUnit 测试控制台输入应用程序
- dart - 未处理的异常:“String”类型不是“double”SQFlite 类型的子类型