Я пытаюсь привязать LiveData<Result<String>>
к TextView
, используя привязку данных. «Результат» - это запечатанный класс, используемый для переноса моего ответа из источника данных.
Но независимо от того, что я делаю, я получаю эту ошибку:
Не удалось найти средство доступа com.saiful .gotravel.domain.Result.data
Result.kt
sealed class Result<out R> {
data class Success<out T>(val data: T) : Result<T>()
data class Error(val exception: Exception) : Result<Nothing>()
object Loading : Result<Nothing>()
override fun toString(): String {
return when (this) {
is Success<*> -> "Success[data=$data]"
is Error -> "Error[exception=$exception]"
Loading -> "Loading"
}
}
}
SearchUseCase.kt
class SearchUseCase @Inject constructor():UseCase<String, String> (){
override suspend fun invoke(params: String): LiveData<Result<String>> {
return withContext(Dispatchers.Main){MutableLiveData<Result<String>>().apply { value =Result.Success("Successful Search Result") }}
}
}
SearchViewModel.kt
class SearchViewModel @Inject constructor(searchUseCase: SearchUseCase) : ViewModel() {
val text:LiveData<Result<String>> = liveData (Dispatchers.IO){
//Returns a LiveData<Result<String>>
emitSource(searchUseCase("This is a LiveData string"))
}}
SearchFragment.kt
class SearchFragment : DaggerFragment() {
@Inject
lateinit var viewModelFactory: ViewModelProvider.Factory
private lateinit var binding: FragmentSearchBinding
private val viewModel by viewModels<SearchViewModel> { viewModelFactory }
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentSearchBinding.inflate(inflater, container, false).apply {
lifecycleOwner = viewLifecycleOwner
vm = viewModel
}
return binding.root
}}
XML
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="vm"
type="com.saiful.gotravel.ui.search.SearchViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.search.SearchFragment">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{vm.text.data}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Может кто-нибудь помочь мне выяснить, что я делаю не так?