FirestoreDatabase.getInstance()
.collection("users")
.add(userData); // where userData is reference to UserData object which contains many fileds
3 Réponses :
Le Cloud Firestore prend en charge la persistance des données hors ligne. Cette fonctionnalité met en cache une copie des données du cloud Firestore que votre application utilise activement. Votre application peut donc accéder aux données lorsque l'appareil est hors ligne. Vous pouvez écrire, lire, écouter et interroger les données en cache. Lorsque le périphérique revient en ligne, Cloud Firestore synchronise toutes les modifications locales faites par votre application au backend Cloud Firestore fort>. P>
blockQuote>
Je ne sais pas quelle situation vous voulez dire autre qu'une connexion réseau non disponible pour que les données ne soit pas enregistrée dans la base de données, mais la base de données sera mise en cache localement afin que tous les conflits soient également utilisés localement. P>
OnSuccesslistener code> déclenchera même si l'utilisateur est hors ligne car par défaut, le changement est effectué localement. S'il ne peut pas être persisté en ligne immédiatement, l'application réessayera une fois qu'une connexion est disponible. Ceci est expliqué ici: Accéder à des données hors ligne p>
Dans mon inSuceSuSlisterer déclenchant uniquement l'utilisateur est en ligne, j'ai essayé de montrer un toast dans l'auditeur, j'ai ajouté les données tandis que les données mobiles étant éteintes des données apparaissent dans UI, puis j'ai allumé les données mobiles, puis le toast est apparu.
Dans ce cas, la tâche ne résout peut-être qu'une fois que la persistance hors ligne est effectuée, mais les défaillances autres que pour la défaillance de la connexion empêcheraient la modification de la copie locale, elles ne seront donc pas présentées dans l'interface utilisateur si elles échouaient (en supposant Votre interface utilisateur est peuplée d'un observateur sur la collection)
@Abhinavchaauhan J'ai ajouté une modification au bas de ma réponse pour répondre à cette réponse - vous n'avez pas besoin de vous inquiéter de cette affaire car elles échouaient localement si elles échouaient localement
Comment sait-il hors ligne si je violais une règle de sécurité ou dépassant une limite d'écriture, car dans ces cas, l'écriture peut échouer, mes données d'application apparaissent dans l'interface utilisateur mais ne sont pas dans la base de données en raison de la règle de sécurité.
Je crois que tout cela fait partie du cache, peut également être vérifié hors ligne.
Dans mes données d'application, des données sont ajoutées à l'interface utilisateur, mais ne parvient pas à ajouter en Firestore en raison de la règle de sécurité maintenant, lorsque j'ouvre une autre activité sur les données indiquées, les données disparaissent.
La sécurité doit être appliquée à la fois par la base de données (via vos règles de sécurité) et via votre interface utilisateur. Il ne devrait pas être possible que l'utilisateur utilise votre application d'une manière qui leur permet d'effectuer une opération qui échouera contre une règle de sécurité; Cachez cette option d'eux dans une application ou effectuez un chèque avant d'ajouter l'élément dans la base de données.
Merci de suggestion mais écrire peut échouer pour de nombreuses raisons comme dépassant une certaine limite, je ne peux pas tout vérifier
@Abhinavchauhaan, ce sont sûrement ces cas de bord cependant? Malheureusement, il semble que vous ayez trois options. 1) Vérifiez tous les cas. 2) Ne vérifiez pas tous les cas, choisissez-les et laissez l'erreur occasionnelle. Ou 3) désactiver la persistance hors ligne et nécessiter une connexion Internet pour atténuer ces erreurs
C'est parce que les données Firestore sont localement persistées par défaut. Par conséquent, si vous enregistrez des données dans Firestore, cela l'enregistre dans la base de données locale. Et plus tard, lorsque Internet sera disponible, il sera synchronisé avec le serveur.
Si vous souhaitez vous débarrasser de cette ligne avant toute opération de l'application. Un endroit plus approprié est la classe d'application. P> Après avoir ajouté ces lignes, les données omis de sauvegarder dans FireStore si une connexion Internet n'est pas disponible. P> P>
Si vous souhaitez désactiver votre désactivation, vous souhaitez modifier le true code> vers
FALSE code> dans
SETPERSISTENTENCENADSABLE code>.
Non, je veux le faire hors ligne Ma première question est que les données peuvent être ajoutées correctement hors ligne et apparaître dans l'interface utilisateur, mais si l'utilisateur récupère en ligne et que le Firestore rejetera pour enregistrer les données.
S'il est enregistré localement, l'échec ne peut pas arriver. Il sera sauvegardé à distance sur le serveur sans erreur.
Mais que se passe-t-il si la demande d'écriture échoue p> blockQuote>
Cela signifie que vous n'avez pas accès à l'écriture de ces données.
OnFailure () Code> est
SEULEMENT STRUT> exécuté lorsqu'il y avait un problème d'écriture du document, ce qui signifie que l'opération d'écriture est rejetée. P> Lorsque l'utilisateur est hors ligne, il peut toujours utiliser l'application et ajouter les données et s'affiche dans UI P> blockQuote>
Ceci se produit parce que pour Android et iOS, la persistance hors ligne est activé par défaut . p>
OnSuccessListener ne se déclenche que lorsque l'utilisateur est en ligne. p> blockQuote>
Oui,
OnSuccessListener () code> est déclenché uniquement lorsque l'opération d'écriture réussit, ce qui signifie que l'opération est écrite sur des serveurs Firebase. P>
Préparé dans la successerneuse d'adresses d'affichage d'un toast disant des données ajoutées mais l'utilisateur ne le voit que lorsqu'il est en ligne, lorsqu'il est hors ligne, il peut voir les données de l'interface utilisateur mais pas toast et pense pourquoi Toast ne se présentait pas cette fois-ci. < / p> blockQuote>
L'utilisateur ne sera pas averti avec celui-ci, car ces données ne sont pas encore ajoutées sur le serveur. P>
Oui, il ne sera pas averti avec Toast quand il est hors ligne, mais l'utilisateur ne comprend pas la persistance hors ligne, il pensera pourquoi il y a un toast de quelque temps et pas d'autres fois, une autre chose est dans mes données d'application apparaît à l'interface utilisateur mais échoue écrire dans la base de données en raison de règles de sécurité, mais s'il apparaît dans UI, mon utilisateur pense qu'il a ajouté avec succès les données
Dans ce cas, vérifiez la connexion Internet avant de faire des opérations. De cette façon, l'utilisateur ne sera pas informé sans but. Si l'écriture échoue, assurez-vous d'avoir défini les règles correctes.
Oui, mais vérifier la connexion Internet défait le but du support hors ligne
Non, la vérification de la connexion Internet vous aidera à savoir quand vous pouvez en informer l'utilisateur ou non.
OnSuccessLister ne reçoit que la gâchette lorsque l'utilisateur est en ligne alors pourquoi voudrai-je vérifier
Vous recherchez une connexion Internet avant de faire des opérations, sinon vous effectuez les opérations et que le toast sera affiché quelque temps plus tard, et je comprends que ce n'est pas ce que vous voulez, non?
Oui et l'ensemble du point d'utilisation de l'auditeur s'assure que les données sont ajoutées, et si les données affichent dans l'interface utilisateur avant que tout auditeur ne soit exécuté, de la perspective du client indiquant que les données de l'interface utilisateur ont été ajoutées, mais des données peuvent ne pas être ajoutées en raison d'une défaillance et d'une insuffisance. La prochaine fois qu'il ouvre que les données ne seront pas présentées dans l'interface utilisateur et il n'aura aucune idée, que se passe-t-il
Dans ce cas, assurez-vous de toujours avoir les règles correctes afin que vos écritures ne manquent jamais.
Merci de suggestion mais écrire peut échouer pour de nombreuses raisons comme dépassant une certaine limite, je ne peux pas m'assurer que tout ou si je change de règles de sécurité en faux parce que j'ai trouvé que je serais trop facturé, mais de la perspective des utilisateurs, ils ajoutaient toujours les données, s'ils sont hors ligne, ils ne reçoivent pas les dernières règles de sécurité et les données apparaîtront dans UI
Dans ce cas, essayez de lire toutes les limitations que vous pourriez dépasser et de vous assurer de rester sous eux.
Oui, mais si je dois m'assurer que tout devrait fonctionner sans échec, pourquoi devrais-je utiliser une liste si je sais que je me suis assuré que tout fonctionnera, et je peux montrer le toast tout de suite. Je sais que je peux commencer à sonner ennuyeux mais je suis juste curieux.
Tout dans Firebase, il s'agit des auditeurs. Sans utiliser, vous ne saurez jamais si votre écriture échoue ou non. Même si vous assurez que tout devrait fonctionner sans échec, vous ne pouvez pas être sûr à 100% à ce sujet.
Hmm qui a été utile, j'apprécie que vous avez pris du temps à effacer les doutes dans la mesure où elles pourraient être effacées. Et si je prends soin de la sécurité et que la défaillance peut se produire rarement comme une fois par an, l'application peut mal se conduire une fois par an à quoi dire?
Non, je dis que vous devriez rechercher toutes les situations dans lesquelles votre application peut échouer et essayer de les éviter. Il est préférable d'éviter également que l'échec pouvant arriver, même une fois par an.
Ok monsieur, je me souviendrai