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

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日

悬赏问题

  • ¥15 精通抖音评论点赞接口的来!需要开发
  • ¥15 VB.NET2022如何生成发布成exe文件
  • ¥30 matlab appdesigner私有函数嵌套整合
  • ¥15 给我一个openharmony跑通webrtc实现视频会议的简单demo项目,sdk为12
  • ¥15 vb6.0使用jmail接收smtp邮件并另存附件到D盘
  • ¥30 vb net 使用 sendMessage 如何输入鼠标坐标
  • ¥15 关于freesurfer使用freeview可视化的问题
  • ¥100 谁能在荣耀自带系统MagicOS版本下,隐藏手机桌面图标?
  • ¥15 求SC-LIWC词典!
  • ¥20 有关esp8266连接阿里云