0
votes

Que s'est-il passé si un enregistrement n'existe pas avec Liveta et la chambre?

Le code A provient des échantillons de facturation du projet, vous pouvez voir ICI .

Je pense que " SELECT * de gold_status limite 1 " Peut-être retourner aucun disque, je ne sais pas si Fun Getgoldstatus (): Livetaa est une déclaration correcte, je pense que cela devrait être le code B, non?

code A xxx

code B xxx


0 commentaires

3 Réponses :


0
votes

code A est juste, car pas les données de la base de données sont renvoyées, mais un titulaire de la classe de données observable (LiveData), cela sera renvoyé même s'il n'y a pas d'enregistrement dans la table. Vous pouvez ensuite joindre un observateur à cet observable, l'observateur sera déclenché une fois que les modifications apportées à la base de données se produisent à W.R.T. Votre requête (vous pouvez trouver plusieurs exemples pour cela dans la documentation Android). La méthode getvalue () d'un objet Livetaa peut renvoyer NULL cependant, si aucune valeur n'a été définie, mais vous utilisez généralement des observateurs pour des changements de la LiveData.


1 commentaires

Merci! Je pense que l'application provoquera lors de l'attribution de NULL à LiveTaA



2
votes

Je ne suis pas un expert en matière de chambre et de sqlite sur Android. Mais je voudrais partager mes propres observations et constatations avec ce problème.

@ p.leibner est correct que livetata ​​code> est renvoyé immédiatement et il n'est pas nul. Le contenu peut être null. P>

Si vous regardez le code généré de DAO, vous verrez qu'il s'agit d'un code Java et qu'il retournera NULL s'il n'y a pas d'enregistrement correspondant à votre requête. Il n'y a pas non plus d'annotations qui aideraient Kotlin compilateur à vérifier la nullabilité. p>

Par conséquent, Nous n'avons pas d'erreur de compilateur ni d'avertissements de peluches forts> si nous renvoyons l'objet non nul p> xxx pré>

mais vous vont courir dans NullPointerExceptions au moment de l'exécution si vous n'avez pas de rangée dans la table et commencez à faire quelque chose avec cet objet si vous le marquez comme non null à Kotlin. P>

Remarque: cela ne se produira pas Si vous retournez list code> ou liveta > code>. Il suffira de retourner une liste vide s'il n'y a pas de lignes correspondant. P>

Je ne le savais pas jusqu'à ce que je rencontre ces problèmes. Peut-être que j'ai manqué quelques explications lors de l'apprentissage de la place. Nous devons simplement savoir que la pièce retournera objet ou null si vous interrogez une ligne unique et une liste ou une liste de vide si plusieurs lignes. P>

Je préfère spécifier la nullabilité de la méthode de retour de la méthode DAO. De cette façon, j'écris un autre code qui fonctionne avec elle à Null Safe Way. P>

J'appellerais celui-ci Code C STROND> P>

// Runtime NullPointerException safe.

fun getGoldStatus(): LiveData<GoldStatus?>
// or
fun getGoldStatus(): GoldStatus?


0 commentaires

0
votes

Il n'y a pas beaucoup à dire.

Vous recevrez LivetaA (NULL) - Alors gardez cela à l'esprit car il peut y avoir un nullpointer. Vous ne recevrez pas d'autres changements de cet objet, aussi, car il n'existe pas.

aller avec xxx

Ce sera beaucoup plus sûr dans tous les cas . (La chambre avec Livadata est toujours une combinaison très buggy)

espère que cela aide.


0 commentaires