Не отображается список при первом пуске приложения
Возникла такая ситуация: цель - запись в БД (room) данных каждые 15 минут через WorkManager. Список RecyclerView заполняется данными из БД. При первом пуске приложения список остается пустым, хотя данные попадают в БД. Если, перезапустить приложение или эмулятор - то данные отображаются в списке. В чем может быть проблема?
class UploadMovieWorker(private val context: Context, workerParameters: WorkerParameters) :
CoroutineWorker(context, workerParameters) {
@Suppress("EXPERIMENTAL_API_USAGE")
override suspend fun doWork(): Result = withContext(Dispatchers.IO)
{
Log.d("uploadWork", "It is working")
return@withContext runCatching {
val repository = MovieRepo(context = applicationContext)
repository.addNewAndGetUpdated()
repository.allMovies.asLiveData().value
//val movieDao = MovieDataBase.create(applicationContext).moviesDao
// movieDao.getAllMovies()
Log.d("work", "doWork: Success function called")
val dateNow = Calendar.getInstance().time
println("Work Manager works! $dateNow")
Toast.makeText(context, "Filmed", Toast.LENGTH_LONG).show()
Result.success()
}.getOrElse { Result.failure() }
}
}
Fragment:
class FragmentMoviesList : Fragment() {
private val workRepository = WorkRepository()
private var _binding: FragmentMoviesListBinding? = null
private val binding get() = _binding!!
@ExperimentalSerializationApi
private val viewModel: MovieViewModel by viewModels { MovieViewModelFactory((requireActivity() as MainActivity).repository) }
private var movieListRecycler: RecyclerView? = null
private lateinit var adapter: MovieListAdapter
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentMoviesListBinding.inflate(inflater, container, false)
val view = binding.root
return view
}
override fun onDestroy() {
movieListRecycler = null
// scope.cancel()
super.onDestroy()
}
@SuppressLint("NotifyDataSetChanged")
@ExperimentalSerializationApi
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
movieListRecycler = binding.listRecyclerView
movieListRecycler?.layoutManager = GridLayoutManager(context, 2)
adapter = MovieListAdapter(clickListener = listener)
movieListRecycler?.adapter = adapter
movieListRecycler?.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
when {
!recyclerView.canScrollVertically(1) -> { //1 for down
viewModel.loadMore()
}
}
}
})
viewModel.allMovies.observe(this.viewLifecycleOwner) { films ->
films.let { adapter.submitList(it) }
}
WorkManager.getInstance(requireContext()).enqueueUniquePeriodicWork("MovieUpload", ExistingPeriodicWorkPolicy.REPLACE,workRepository.periodicWork)
// viewModel.insert()
}
private fun doOnClick(movie: MovieEntity) {
movieListRecycler?.let { rv ->
Snackbar.make(
rv,
"You chose: {${movie.title}}",
Snackbar.LENGTH_SHORT
).show()
}
}
private val listener = object : OnRecyclerItemClicked {
override fun onClick(movie: MovieEntity) {
val fragment: Fragment = FragmentMoviesDetails()
val fragmentManager: FragmentManager = requireActivity().supportFragmentManager
val fragmentTransaction: FragmentTransaction = fragmentManager.beginTransaction()
val args = Bundle()
args.putParcelable("key", movie)
fragment.arguments = args
fragmentTransaction.add(R.id.fragment, fragment)
fragmentTransaction.addToBackStack(null)
fragmentTransaction.commit()
doOnClick(movie)
}
}
companion object {
fun newInstance() = FragmentMoviesList()
}