°司马 攸礼つ 2021-08-24 11:08 采纳率: 0%
浏览 76
已结题

kotlin中如何在fragment中对SQLite进行操作?

根据第一行代码,activity中对数据库的创建操作如下:
新建MyDatabaseHelper类继承自SQLiteOpenHelper。


class MyDatabaseHelper(val context: Context, name: String, version: Int) : 
        SQLiteOpenHelper(context, name, null, version) { 
 
    private val createBook = "create table Book (" + 
            " id integer primary key autoincrement," + 
            "author text," + 
            "price real," + 
            "pages integer," + 
            "name text)" 
 
    override fun onCreate(db: SQLiteDatabase) { 
        db.execSQL(createBook) 
        Toast.makeText(context, "Create succeeded", Toast.LENGTH_SHORT).show() 
    } 
 
    override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { 
    } 
 
} 


布局中就一个android:id="@+id/createDatabase"的按钮
然后修改MainActivity中的代码如下


```kotlin
class MainActivity : AppCompatActivity() { 
 
    override fun onCreate(savedInstanceState: Bundle?) { 
        super.onCreate(savedInstanceState) 
        setContentView(R.layout.activity_main) 
        val dbHelper = MyDatabaseHelper(this, "BookStore.db", 1) 
        createDatabase.setOnClickListener { 
            dbHelper.writableDatabase 
        } 
  } 
 
}


以上是在activity中的操作,那么在fragment中该如何修改呢?
我还是和activity创建一样的SQLiteOpenHelper,布局也一样。那么问题来了,activity中是在onCreate()方法中构建了一个MyDatabaseHelper对象,那么在fragment中该如何操作?我创建了如下基于fragment的构建方法:
class RightFragRSC1 : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.rightfrag_rsc1, container, false)
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        val rscdbHelper = DatabaseHelper(this, "RSC_DataBase.db", 1)//这里this出现报错

        RSC1_Save.setOnClickListener {
            rscdbHelper.writableDatabase
        }
    }
}

以上代码中构建对象的过程中出现了问题,在.onActivityCreated()后的rscdbHelper对象参数中的this出现了问题,报错内容如下,现在不知道该如何处理了? 
  • 写回答

2条回答 默认 最新

  • °司马 攸礼つ 2021-08-24 16:32
    关注

    博主您好,您遇到这个问题说明您对Context相关的内容理解还不到位,当然,Context对象也是kotlin中一个比较麻烦的量。
    您看的书是郭大神的《第一行代码》,相信您还没有完全看完这本书,不然您不会有这个问题的。
    您需要的答案,在这本书的14.1章节“全局获得Context的技巧”中,您看一下这部分内容,就知道该如何解决以上问题了。
    共勉。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月1日
  • 已采纳回答 8月24日
  • 修改了问题 8月24日
  • 创建了问题 8月24日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装