Я новичок в MVVM. поэтому у меня есть 2 запроса к серверу из моего фрагмента / действия, результат первого запроса будет использоваться в качестве входного параметра для второго запроса.
, поэтому сначала в моем фрагменте, когда нажимается кнопка, затем Я делаю запрос, чтобы проверить, забанен ли пользователь или нет, если нет, то этот пользователь может создать сообщение.
, поэтому сначала я проверяю, забанен ли пользователь или не использует этот код в моем фрагменте
class CreateEventFragment : Fragment() {
lateinit var model: CreateEventViewModel
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
model = ViewModelProvider(this).get(CreateEventViewModel::class.java)
button.setOnClickListener {
model.checkIfUserIsBanned()
}
}
}
и вот модель представления
class CreateEventViewModel(application: Application) : AndroidViewModel(application) {
val mUserIsBanned :MutableLiveData<Boolean> = UserClient.mUserIsBanned
fun checkIfUserIsBanned(userID: String) {
UserRepository.checkIfUserIsBanned(id)
}
}
, а вот клиент (для простоты я пропускаю репозиторий)
object UserClient {
val mUserIsBanned = MutableLiveData<Boolean>()
fun checkIfUserIsBanned(userID: String) {
// perform networking, after getting the value then
if (user.isBanned) {
mUserIsBanned.postValue(true)
} else {
mUserIsBanned.postValue(false)
}
}
}
вот проблема, второй запрос нужен результат первого результата, т.е. mUserIsBanned
необходимо проверить, не заблокирован ли пользователь, а затем выполнить второй запрос (пользователь создает сообщение). мой вопрос, где я могу разместить эту логи c? в viewmodel или в моем фрагменте?
if (userIsBanned == false) {
createPost()
}
из учебника, который я видел, кажется, что liveata всегда наблюдается во фрагменте. поэтому первый вариант заключается в том, чтобы поместить logi c во фрагмент, подобный этому
model.mUserIsBanned.observe(viewLifecycleOwner, Observer { isBanned ->
val userIsBanned = isBanned ?: return@Observer
if (!userIsBanned) {
model.createPost()
}
})
. Можно ли размещать проверку кода таким образом во фрагменте?
на самом деле мне не нужно наблюдать isBanned, мне просто нужно проверить его один раз
или второй вариант - проверить userIsBanned или нет в viewmodel, но я не знаю как сделать наблюдение жилетата во viewmodel
или у меня все неправильно? Я не уверен, используя этот MVVM
, пожалуйста, помогите, java тоже нормально.