Error(message: String?)< /code> < /p>
Dies sind Live -Daten für boolean:
val mutableUserDataFound : MutableLiveData = MutableLiveData()< /code>
Jetzt, während Sie diesen Spaß verwenden: < /p>
fun availabilityCheckforUserInfo() = viewModelScope.launch {
mutableUserDataFound.postValue(TypeSafe.Loading())
try {
val userinfo = repository.getUserInfo()
if (userinfo != null) {
mutableUserDataFound.postValue(TypeSafe.Success(true))
} else {
mutableUserDataFound.postValue(TypeSafe.Success(false))
}
} catch (e: Exception) {
mutableUserDataFound.postValue(TypeSafe.Error(e.message))
}
}
< /code>
Ich bin mehr Sorge um True und False, wenn nicht null userInfo es ist, hier nicht meine erste Priorität zu erhalten,
Ich habe eine UI-Logik, basierend auf dem.postValue(true or false)< /code>
Auch wenn der Typ typeSafe.success () < /code> Die Daten zurückgeben, gibt ich null < /code>
weiter in UI habe ich wenn () < /code> Ausdruck in Beobachter < /code> < /p>
Mainaktivität: < /p>
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
lateinit var mainViewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
supportActionBar?.hide()
viewModelInitializor()
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
}
private fun viewModelInitializor() {
mainViewModel = ViewModelProvider(this,
MainViewModelProvider(
Repository(DBAccess(this))
)
).get(MainViewModel::class.java)
}
}
< /code>
Fragmenta: < /p>
class FragmentA : Fragment(R.layout.fragment_a) {
private val TAG = "FragmentA"
private lateinit var binding: FragmentABinding
lateinit var mainViewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mainViewModel = (activity as MainActivity).mainViewModel
mainViewModel.availabilityCheckforUserInfo()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding = FragmentABinding.bind(view)
mainViewModel.mutableUserDataFound.observe(viewLifecycleOwner, Observer { result ->
when (result) {
is TypeSafe.Loading -> {
// show progress bar animation
loadingAnimationConfig(View.VISIBLE)
}
is TypeSafe.Success -> {
Log.d(TAG, "success result = ${result.data}") // D success result = null
result.data?.let {
if (it) { // if available
Log.d(TAG, "if true $it")
// stop progess bar
mainViewModel.login()
loadingAnimationConfig(View.GONE)
} else { // if not available
Log.d(TAG, "else $it")
loadingAnimationConfig(View.GONE)
findNavController().navigate(R.id.inputFragment)
}
}
}
is TypeSafe.Error -> {
showToast(
msg = "Error: ${result.message}",
dursn = Toast.LENGTH_LONG
)
}
}
})
}
}
< /code>
result.data?.let {< /code> Dies wird vorübergehend hinzugefügt.Log.d(TAG, "success result = ${result.data}")< /code>
// D success result = null
[code]TypeSafe< /code> ist eine versiegelte Klasse, die 3 Subklassen hat,
Loading()[/code],[code]Success(data: T?)[/code],[code]Error(message: String?)< /code> < /p> Dies sind Live -Daten für boolean:
val mutableUserDataFound : MutableLiveData = MutableLiveData()< /code>
Jetzt, während Sie diesen Spaß verwenden: < /p> fun availabilityCheckforUserInfo() = viewModelScope.launch { mutableUserDataFound.postValue(TypeSafe.Loading()) try { val userinfo = repository.getUserInfo() if (userinfo != null) { mutableUserDataFound.postValue(TypeSafe.Success(true)) } else { mutableUserDataFound.postValue(TypeSafe.Success(false)) } } catch (e: Exception) { mutableUserDataFound.postValue(TypeSafe.Error(e.message)) } } < /code> Ich bin mehr Sorge um True und False, wenn nicht null userInfo es ist, hier nicht meine erste Priorität zu erhalten,
Ich habe eine UI-Logik, basierend auf dem.postValue(true or false)< /code>
Auch wenn der Typ typeSafe.success () < /code> Die Daten zurückgeben, gibt ich null < /code>
weiter in UI habe ich wenn () < /code> Ausdruck in Beobachter < /code> < /p>
Mainaktivität: < /p> class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding
lateinit var mainViewModel: MainViewModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) supportActionBar?.hide() viewModelInitializor() binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
} private fun viewModelInitializor() { mainViewModel = ViewModelProvider(this, MainViewModelProvider( Repository(DBAccess(this)) ) ).get(MainViewModel::class.java) } } < /code> Fragmenta: < /p> class FragmentA : Fragment(R.layout.fragment_a) { private val TAG = "FragmentA" private lateinit var binding: FragmentABinding
lateinit var mainViewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) mainViewModel = (activity as MainActivity).mainViewModel mainViewModel.availabilityCheckforUserInfo() }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState)
binding = FragmentABinding.bind(view)
mainViewModel.mutableUserDataFound.observe(viewLifecycleOwner, Observer { result -> when (result) { is TypeSafe.Loading -> { // show progress bar animation loadingAnimationConfig(View.VISIBLE) } is TypeSafe.Success -> { Log.d(TAG, "success result = ${result.data}") // D success result = null result.data?.let { if (it) { // if available Log.d(TAG, "if true $it") // stop progess bar mainViewModel.login() loadingAnimationConfig(View.GONE) } else { // if not available Log.d(TAG, "else $it") loadingAnimationConfig(View.GONE) findNavController().navigate(R.id.inputFragment) } } } is TypeSafe.Error -> { showToast( msg = "Error: ${result.message}", dursn = Toast.LENGTH_LONG ) } } }) }
}
< /code> result.data?.let {< /code> Dies wird vorübergehend hinzugefügt.Log.d(TAG, "success result = ${result.data}")< /code>
// D success result = null[/code] Dies stammt von Logcat
Ich entwerfe einen Folgekurs für AP Informatik A (was in Java unterrichtet wird). Mein Ziel ist es, Highschool -Senioren beizubringen, wie eine einfache Programmiersprache von Grund auf implementiert...