Почему вы входите в наблюдателя дважды? - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть наблюдатель в каждом фрагменте, и у меня проблема в том, что он дважды попадает в наблюдателя, и я не очень хорошо знаю, потому что, давайте посмотрим, сможете ли вы помочь мне. Это мой вариант использования:

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

Я добавил тост, чтобы увидеть, показывает ли он мне данные, и он показывает, но он показывает мне тост дважды подряд. Я понятия не имею, почему это может происходить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...