Room Database 之保存和搜索数据

1、报错数据到数据库

将要保存的数据传入FavDish的构造函数,调用viewModule的insert方法进行保存

val favDishDetails : FavDish = FavDish(
                                0,
                                mImagePath,
                                Constants.DISH_IMAGE_SOURCE_LOCAL,
                                title,
                                type,
                                category,
                                ingredients,
                                cookingTimeInMinutes,
                                cookingDirection,
                                false
                            )
mFavDishViewModel.insert(favDishDetails)

2、查询数据

创建model

    private val mFavDishViewModel : FavDishViewModel by viewModels(){
        FavDishViewModelFactory((requireActivity().application as FavDishApplication).repository)
    }

item就是所要查询的数据

     mFavDishViewModel.allDishesList.observe(viewLifecycleOwner){
            dishes ->
                dishes.let{
                    for(item in it){
                        Log.i("Dish Title","${item.id} :: ${item.title}")
                    }
                }
        }

运行结果:

在该界面输入数据并保存数据到数据库


​​​​​​​

在该界面打印保存的条目id和标题title:

 

 

注:

代码:

1、在FavDishDoa中添加查询语句

@Query( "SELECT * FROM FAV_DISHES_TABLE ORDER BY ID")
    fun getAllDishesList() : Flow<List<FavDish>>
@Dao
interface FavDishDao {

    @Insert
    suspend fun insertFavDishDetails(favDish : FavDish)

    @Query( "SELECT * FROM FAV_DISHES_TABLE ORDER BY ID")
    fun getAllDishesList() : Flow<List<FavDish>>

    @Query("DELETE FROM FAV_DISHES_TABLE")
    suspend fun deleteAll()

}

2、在FavDishViewModule中获取数据

 @Query( "SELECT * FROM FAV_DISHES_TABLE ORDER BY ID")
    fun getAllDishesList() : Flow<List<FavDish>>
package com.example.mykotlin1.model.database

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import com.example.mykotlin1.model.entities.FavDish
import kotlinx.coroutines.flow.Flow


@Dao
interface FavDishDao {

    @Insert
    suspend fun insertFavDishDetails(favDish : FavDish)

    @Query( "SELECT * FROM FAV_DISHES_TABLE ORDER BY ID")
    fun getAllDishesList() : Flow<List<FavDish>>

    @Query("DELETE FROM FAV_DISHES_TABLE")
    suspend fun deleteAll()

}

3、在FavDishRepository中获取所有数据

    val allDishesList : Flow<List<FavDish>> = favDishDao.getAllDishesList()
package com.example.mykotlin1.model.database

import androidx.annotation.WorkerThread
import com.example.mykotlin1.model.entities.FavDish
import kotlinx.coroutines.flow.Flow

class FavDishRepository(private val favDishDao: FavDishDao) {

    @Suppress("RedundantSuspendModifier")
    @WorkerThread
    suspend fun insertFavDishData(favDish: FavDish){
        favDishDao.insertFavDishDetails(favDish)
    }

    val allDishesList : Flow<List<FavDish>> = favDishDao.getAllDishesList()
}

4、在界面中初始化viewmodele

    private val mFavDishViewModel : FavDishViewModel by viewModels(){
        FavDishViewModelFactory((requireActivity().application as FavDishApplication).repository)
    }

5、在界面中调用查找数据的方法

        mFavDishViewModel.allDishList.observe(viewLifecycleOwner){
            dishes ->
                dishes.let{
                    for(item in it){
                        Log.i("Dish Title","${item.id} :: ${item.title}")
                    }
                }
        }
package com.example.mykotlin1.view.fragments

import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.*
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.ViewModelProvider
import com.example.mykotlin1.R
import com.example.mykotlin1.application.FavDishApplication
import com.example.mykotlin1.databinding.FragmentHomeBinding
import com.example.mykotlin1.view.activities.AddUpdateDishActivity
import com.example.mykotlin1.view.activities.FavDishActivity
import com.example.mykotlin1.viewmodel.FavDishViewModel
import com.example.mykotlin1.viewmodel.HomeViewModel

class HomeFragment : Fragment() {

//    private var _binding: FragmentHomeBinding? = null


//    private val binding get() = _binding!!

    private lateinit var homeViewModel: HomeViewModel

    private val mFavDishViewModel : FavDishViewModel by viewModels{
        FavDishViewModel.FavDishViewModelFactory((requireActivity().application as FavDishApplication).repository)

    }

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



    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        homeViewModel =
            ViewModelProvider(this).get(HomeViewModel::class.java)

        val root = inflater.inflate(R.layout.fragment_home,container,false)

        val textView: TextView = root.findViewById(R.id.text_home)
        homeViewModel.text.observe(viewLifecycleOwner) {
            textView.text = it
        }
        return root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        mFavDishViewModel.allDishList.observe(viewLifecycleOwner){
            dishes ->
                dishes.let{
                    for(item in it){
                        Log.i("Dish Title","${item.id} :: ${item.title}")
                    }
                }
        }

    }

    fun dishDetails(){
//        findNavController().navigate(AllDishesFragmentDirections.a)
        if(requireActivity() is FavDishActivity){
            (activity as FavDishActivity?)?.hideBottomNavigationView()
        }
    }

    override fun onResume() {
        super.onResume()
        if(requireActivity() is FavDishActivity){
            (activity as FavDishActivity?)?.showBottomNavigationView()
        }
    }

    override fun onPause() {
        super.onPause()
        dishDetails()
    }

    override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
        inflater.inflate(R.menu.menu_all_dishes,menu)
        super.onCreateOptionsMenu(menu, inflater)
    }


    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when(item.itemId){
            R.id.action_add_dish -> {
                val intent = Intent(requireContext(), AddUpdateDishActivity::class.java)
                startActivity(intent)
            }
        }
        return super.onOptionsItemSelected(item)
    }




    override fun onDestroyView() {
        super.onDestroyView()
//        _binding = null
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值