Я новичок в mvvm, и я пытался вызвать API в kotlin в mvvm, используя модернизацию.
это мой xml
<TextView
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="84dp" app:layout_constraintTop_toTopOf="parent"/>
<Button
android:text="Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHorizontal_bias="0.498" app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="332dp" app:layout_constraintTop_toBottomOf="@+id/textView"
android:layout_marginBottom="8dp" app:layout_constraintBottom_toBottomOf="parent"/>
Вы можете видеть, что у меня есть только два элемента. одна кнопка для вызова API и включения для отображения кода результата вызова (будь то 200 или что-то еще).
class testViewModel: ViewModel() {
var testInput :MutableLiveData<Int> = MutableLiveData(1)
var test :LiveData<Int> = testInput
fun clicked(){
test = API_Repository.createCode()
println(test.value.toString())
}
}
это моя модель взгляда.
fun createCode(): LiveData<Int> {
var sendUser = CreateCodeUserClass()
sendUser.setUsername("09360767928")
var data = MutableLiveData<Int>()
my_API_Interface!!.CreateCode(sendUser).enqueue(object : retrofit2.Callback<Void> {
override fun onFailure(call: Call<Void>, t: Throwable) {
data.value = 10000
println(data.value.toString())
}
override fun onResponse(call: Call<Void>, response: Response<Void>) {
data.value = response.code()
}
})
return data
}
и это мой вызов API
class MainActivity : AppCompatActivity() {
public var viewModel = testViewModel()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel = ViewModelProviders.of(this).get(testViewModel::class.java)
viewModel.test!!.observe(this, Observer { data ->
print(data.toString())
textView.text = data.toString()
})
button.setOnClickListener {
viewModel.clicked()
}
}
}
и это моя основная деятельность. когда я вызываю API в моем представлении, тест модели всегда равен нулю, где он должен быть либо 10000, либо каким-либо другим числом. я думаю, что функция createCode заканчивается до срабатывания OnResponse или OnFailure. но я не знаю, что делать, и я хочу использовать mvvm.