2013-04-01 3 views
0

Juste curieux sur la meilleure pratique sur la synchronisation des données d'une base de données à une tablette Android.La meilleure façon de structurer une synchronisation entre une tablette et une base de données?

Tables:

- Part1 
- Part2 
- Part3 
- Part4 
- Part5 

Chaque fois que j'ouvre l'application sur la tablette que je prends les dernières listes de la base de données, tronquer la table, et ajouter de nouveau les dossiers. Chaque table comprend 400 enregistrements. Il faut donc environ 60,45 par table pour récupérer les données du serveur et les ajouter. Comme j'ai 5 tables cela prend environ 5 minutes. Y a-t-il un meilleur moyen d'obtenir une synchronisation efficace pour ce que je fais? Après avoir saisi les données du serveur, au lieu de tronquer la table, j'ai essayé de vérifier s'il existait avant de l'ajouter, mais cela n'a pas aidé avec le temps. Ce que je suis en train de faire: Je reçois la liste JSON du serveur API et tronque la table et rajoute les lignes. Joli temps avec 5 tables de 500 enregistrements chacune.

libraryApp = (LibraryApp) act.getApplication(); 
    List<Pair> technicians = getJsonData("get_technicians"); 
    if(technicians.size() > 0) { 
     stiLibraryApp.getDataManager().emptyTechnicianTable(); // truncate current table 
     // add technicians back to database 
     for(Pair p : technicians) { 
      libraryApp.getDataManager().saveTechnician(new Technician((Integer) p.key(), (String) p.value())); 
     } 
    } 
+1

Pouvez-vous poser une question plus spécifique en fonction d'un extrait de code? Il est difficile de répondre à une question "meilleure façon" sans aucune idée de ce que vous faites. – Rarw

+0

J'essaye de synchroniser des données d'une base de données distante à une tablette afin que les gens puissent l'utiliser tout en étant mobile. Je souhaite synchroniser l'application de deux manières: 1) lorsque vous ouvrez l'application pour la première fois, toutes les données seront saisies; 2) un bouton appelé "synchronisation" qui mettra à jour/rajoutera les données de la base de données si elles ont changé. Est-ce mieux? – user2011736

+0

Comment faites-vous ça maintenant? Qu'avez-vous essayé?Pouvez-vous montrer le code? – Rarw

Répondre

0

Étant donné que les informations fournies je les opérations suivantes:

(1) Demandez à votre serveur garder un enregistrement de la table lorsque vous mettez à jour la dernière « mise » sur le serveur. Je n'ai aucune idée de la langue de backend que vous utilisez, donc je ne peux pas faire une suggestion. Mais il devrait être très facile de conserver un horodatage mis à jour.

Avec cet horodatage, vous serez en mesure de dire si la version de la table sur votre serveur est plus récente que la version sur votre appareil mobile.

(2) En utilisant un AsyncTask télécharger les données dont vous avez besoin. Je ne suis pas sûr si toutes les 5 tables sont dans la même activité, dans des activités séparées, dans des fragments ou quelque chose d'autre. Cependant, l'idée générale est la suivante:

private class GetTableData extends AsyncTask<Void, Void, Void>{ 
    @Override 
    protected Void doInBackground(){ 
     //get data from your sever 
     return null; 
    } 


    protect void onPostExecute(Void result){ 
     //update the table view if version on server is newer 
    } 

Vous placerez toutes vos méthodes d'E/S, qui est ceux qui se connectent à vos données de serveur et téléchargement au sein doInBackground. Vous allez placer toutes les méthodes qui mettent à jour la vue de table dans onPostExecute. Cette séparation est nécessaire car, si les fonctions d'E/S doivent s'exécuter en arrière-plan après Jellybean, les vues doivent être mises à jour à partir du thread d'interface utilisateur.

(3) Vérifiez l'horodatage de ce que vous avez téléchargé. Si ce que vous avez téléchargé est plus récent, mettez à jour votre tableau. Vous pouvez acomplish en ajoutant simplement dans une statment conditionnelle à votre fonction onPostExecute telle que

if(lastDownloadTime < lastUpdatedOnServerTime){ 
    //update view 
} 

En fonction de la taille des fichiers de table sont que vous pouvez ajouter une fonction sur votre code sever qui retourne juste le temps de la table a été mis à jour De cette façon, vous pouvez vérifier l'heure de la dernière mise à jour par rapport à la dernière fois que vous avez téléchargé la table. Si la table a été mise à jour sur le serveur après l'avoir téléchargée, vous pouvez procéder au téléchargement des nouvelles informations.

C'est l'idée de base. Vous pouvez l'adapter à votre propre configuration.

+0

Mais votre réponse n'a rien à voir avec le comportement de synchronisation et l'efficacité? Je vérifie déjà si j'ai besoin de synchroniser avec les dernières données mais mon problème est de savoir comment puis-je améliorer la vitesse après avoir vérifié if (lastDownloadTime user2011736

+0

Qu'est-ce que vous ajoutez qu'il faut si longtemps pour télécharger? Le moyen le plus rapide serait de télécharger et d'afficher uniquement les champs qui ont été modifiés. Pour ce faire, vous devez suivre la dernière mise à jour pour chaque valeur modifiable de la table. Si votre table est indexée, il est facile de remplacer uniquement les valeurs qui ont été modifiées puisqu'elles sont toutes codées. – Rarw

Questions connexes