"MutablElivedata.PostValue (boolean)", das schließt "null" in Livedata [geschlossen]Android

Forum für diejenigen, die für Android programmieren
Anonymous
 "MutablElivedata.PostValue (boolean)", das schließt "null" in Livedata [geschlossen]

Post by Anonymous »

Code: Select all

TypeSafe< /code> ist eine versiegelte Klasse, die 3 Subklassen hat,

Loading()
,

Code: Select all

Success(data: T?)
,

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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post