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
}
}