У меня есть наблюдатель в каждом фрагменте, и у меня проблема в том, что он дважды попадает в наблюдателя, и я не очень хорошо знаю, потому что, давайте посмотрим, сможете ли вы помочь мне. Это мой вариант использования:
class GetRegionsCasesUseCase {
fun getRegionCases(casesRepositoryLiveDataContract: CasesRepositoryLiveDataContract) {
object: AsyncTask<List<CasesModel>, Void, Void>(){
override fun doInBackground(vararg params: List<CasesModel>?): Void? {
try {
val rows: List<List<String>> = csvReader().readAll(URL(CASES_FILE_URL).openStream())
val listCCAA: List<CasesModel> = rows.map {
CasesModel(it[0], it[1], it[2], it[3], it[4], it[5])
}
val lastDate: String = listCCAA.map { it.date }.last { it.isNotEmpty() }
val finalItems = listCCAA.filter { lastDate == it.date }
casesRepositoryLiveDataContract.onSuccess(finalItems)
} catch (e: Exception) {
e.printStackTrace()
}
return null
}
}.execute()
}
}
Это мой класс хранилища:
class CasesFragmentRepository {
@Inject
lateinit var getRegionsCasesUseCase: GetRegionsCasesUseCase
private val regionsCases = MutableLiveData<List<CasesModel>>()
init {
GlobalApplication.useCaseApplicationComponent?.inject(this)
}
fun getRegionsCasesListFromRepository(): LiveData<List<CasesModel>> {
return regionsCases
}
fun getRegionsCasesListUseCase() {
getRegionsCasesUseCase.getRegionCases(object : CasesRepositoryLiveDataContract {
override fun showError(show: Boolean?) {
}
override fun onLoading(loading: Boolean) {
}
override fun onSuccess(regionsCasesList: List<CasesModel>?) {
regionsCases.postValue(regionsCasesList)
}
})
}
}
Это моя модель просмотра:
class CasesFragmentViewModel: ViewModel(), CasesFragmentContract {
@Inject
lateinit var casesFragmentRepository: CasesFragmentRepository
init {
GlobalApplication.viewModelApplicationComponent?.inject(this)
}
fun getCountriesFlagLiveData(): LiveData<List<CasesModel>> {
casesFragmentRepository.getRegionsCasesListUseCase()
return casesFragmentRepository.getRegionsCasesListFromRepository()
}
override fun getRegionsCasesFromFile() {
casesFragmentRepository.getRegionsCasesListFromRepository()
}
}
И, наконец, это мой фрагмент:
class CasesFragment : Fragment() {
private lateinit var casesFragmentViewModel: CasesFragmentViewModel
companion object {
fun newInstance(): CasesFragment {
return CasesFragment()
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_cases, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
casesFragmentViewModel = ViewModelProvider(this).get(CasesFragmentViewModel::class.java)
casesFragmentViewModel.getCountriesFlagLiveData().observe(viewLifecycleOwner, Observer {
Toast.makeText(context, it[0].casos, Toast.LENGTH_SHORT).show()
})
}
}
Я добавил тост, чтобы увидеть, показывает ли он мне данные, и он показывает, но он показывает мне тост дважды подряд. Я понятия не имею, почему это может происходить.