by Anonymous » 31 Aug 2025, 12:14
Code: Select all
TypeSafe< /code> ist eine versiegelte Klasse, die 3 Subklassen hat,
Loading()
,
,
Code: Select all
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
Dies stammt von Logcat
[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