0
votes

Tout en récupérant des données et la stocker dans SQLite dB l'interface utilisateur de mon application gèle

Bonjour mon application est gèle d'interface utilisateur pendant quelques secondes, alors qu'il récupère des données du réseau et le stocke dans dB, puis le montre à RecyclerView. Pour récupérer des données du réseau, j'utilise la modernisation et pour le stocker et récupérer la bibliothèque de la chambre DB. À la fois avec l'aide du modèle MVVM. Y a-t-il un moyen de remover le gel de l'interface utilisateur? Voici mon code:

dans la MainActivité lorsque vous cliquez sur Télécharger BTN P>

@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertEvents(EventsTable data);

@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertTicketDates(TicketDatesTable datesTable);


2 commentaires

Utilisez l'analyse asynctique ou un thread pour traiter les données.


@Chandankushwaha dans mon viewModel ?? J'utilise déjà asyncktask dans le repo d'insertion


3 Réponses :


-1
votes

pourquoi vous utilisez ce fil.sleep (150); appel est déjà une tâche d'arrière-plan dans la modernisation


3 commentaires

Sans l'utiliser, il stocke uniquement le dernier article dans la chambre. Si je retarde 150ms, il insère chaque article. Je pensais que ça gèlera l'interface utilisateur mais pas comme ça


@Chandankushwaha je le sais


Si je ne attends pas 150ms à la fin de la boucle, il ne peut pas insérer toutes les données



0
votes

Une meilleure solution serait de collecter tous vos objets requis dans un ArrayList , puis transmettez-le sur le asynccaptask et de là à dao pour l'insertion en vrac.

et supprimer toutes les déclarations de thread.sleep (150) car ils ne servent aucun but.


6 commentaires

J'ai essayé de supprimer le fil.sleep () et inséré directement la liste des éléments. Mais il n'entre que le dernier élément de la liste


J'ai utilisé le fil de dormir pour insérer un élément et attendre puis insérez le prochain.


Sans cela, il n'enserve qu'un élément


Veuillez partager le code dans lequel vous avez essayé d'insérer les éléments sous la forme d'une liste et supprimé thread.sleep () .


Si vous jugez approprié, veuillez partager votre solution au profit de tous.


Je l'ai partagé, j'ai déjà répondu à ma question. C'était un problème stupide



1
votes

J'ai trouvé mon problème. Il s'agissait d'une entité d'initialisation avant de commencer la boucle:

Avant: xxx

après: xxx


0 commentaires