简体   繁体   English

如何使用 Android Kotlin 在片段中使用上下文?

[英]How to use Context in Fragment using Android Kotlin?

I want to read data from SQLite database.我想从 SQLite 数据库中读取数据。 I want get that data in fragment.我想在片段中获取该数据。 But I am unable to get that data.但是我无法获取该数据。 here is my code of Fragment:-这是我的片段代码:-

class AuditFragment : Fragment() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.fragment_audit, container, false)

        val id = "LAW_TABLE_DATABASE"

        view.findViewById<FloatingActionButton>(R.id.fb_audit).setOnClickListener {
            val intent = Intent(requireContext(), Datafunction::class.java)
            intent.putExtra("id", id)
            startActivity(intent)
        }
        getAuditListFromDB()

        return view
    }

    private fun getAuditListFromDB() {

        val dbHandler = FilesDatabase(this)

        val getAuditFilesList = dbHandler.getAUDITFileslist()

        if (getAuditFilesList.size > 0) {
            recycle_audit.visibility = View.VISIBLE
            no_data_audit.visibility = View.GONE
            setupAuditFilesRecyclerView(getAuditFilesList)
        } else {
            recycle_audit.visibility = View.GONE
            no_data_audit.visibility = View.VISIBLE
        }
    }


    private fun setupAuditFilesRecyclerView(happyPlacesList: ArrayList<FilesData>) {

        recycle_audit.layoutManager = LinearLayoutManager(this)
        recycle_audit.setHasFixedSize(true)

        val placesAdapter = DatafunctionAdapter(this, happyPlacesList)
        recycle_audit.adapter = placesAdapter
    }
}

here is my code for storing and reading SQLite data:-这是我存储和读取 SQLite 数据的代码:-

class FilesDatabase(context: Context) :
    SQLiteOpenHelper(context, AC_TABLE_DB, null, DATABASE_VERSION) {

    companion object{
        private const val DATABASE_VERSION = 1
        private const val AC_TABLE_DB = "AC_TABLE_DATABASE"
        private const val TABLE_FILES_DATABASE ="FILES_TABLE"

        private const val KEY_ID = "_id"
        private const val KEY_TITLE = "title"
        private const val KEY_DATE = "date"
        private const val KEY_FILE_PATH = "filepath"
        private const val KEY_FILE_NAME = "filename"
    }


    override fun onCreate(db: SQLiteDatabase?) {
        val CREATE_TABLE = ( "CREATE TABLE " + TABLE_FILES_DATABASE + "("
                + KEY_ID + " INTEGER PRIMARY KEY,"
                + KEY_TITLE + " TEXT, "
                + KEY_DATE + " TEXT, "
                + KEY_FILE_PATH + " TEXT, "
                + KEY_FILE_NAME + " TEXT)")
        db?.execSQL(CREATE_TABLE)
    }

    override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
        db!!.execSQL("DROP TABLE IF EXISTS $TABLE_FILES_DATABASE")
        onCreate(db)
    }

    fun addFilesdatabase(filesdata: FilesData): Long {
        val db = this.writableDatabase

        val contentValues = ContentValues()
        contentValues.put(KEY_TITLE, filesdata.title)
        contentValues.put(KEY_DATE, filesdata.date)
        contentValues.put(KEY_FILE_PATH, filesdata.filepath)
        contentValues.put(KEY_FILE_NAME, filesdata.fileName)

        // Inserting Row
        val result = db.insert(TABLE_FILES_DATABASE, null, contentValues)
        //2nd argument is String containing nullColumnHack

        db.close() // Closing database connection
        return result
    }

    @SuppressLint("Range")
    fun getAUDITFileslist():ArrayList<FilesData> {
        val filesDatalist:ArrayList<FilesData> = ArrayList()

        val selectQuery ="SELECT * FROM $AC_TABLE_DB"

        val db = this.readableDatabase

        try {
            val cursor: Cursor = db.rawQuery(selectQuery, null)
            if (cursor.moveToFirst()) {
                do {
                    val filedata = FilesData(
                        cursor.getInt(cursor.getColumnIndex(KEY_ID)),
                        cursor.getString(cursor.getColumnIndex(KEY_TITLE)),
                        cursor.getString(cursor.getColumnIndex(KEY_DATE)),
                        cursor.getString(cursor.getColumnIndex(KEY_FILE_PATH)),
                        cursor.getString(cursor.getColumnIndex(KEY_FILE_NAME))
                    )
                    filesDatalist.add(filedata)
                } while (cursor.moveToNext())
            }
            cursor.close()
        } catch (e: SQLiteException) {
            db.execSQL(selectQuery)
            return ArrayList()
        }
        return filesDatalist
    }
}

I want to read data in recylerview.我想在 recylerview 中读取数据。 I am getting problem with this which is use for context.我遇到了用于上下文的问题。 Can someone please help me?有人可以帮帮我吗?

Replace:代替:

  val dbHandler = FilesDatabase(this)

with:和:

  val dbHandler = FilesDatabase(requireActivity())

This is probably not the answer you're looking for, but have you considered using the Room wrapper with SQLite?这可能不是您正在寻找的答案,但您是否考虑过将 Room 包装器与 SQLite 一起使用? It will make your job easier.这将使您的工作更轻松。

Room with RecyclerView sample: here带 RecyclerView 示例的房间: 此处

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM