IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Nombreux GeoPoint et AsyncTask


Sujet :

Android

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 116
    Par défaut Nombreux GeoPoint et AsyncTask
    Bonjour à tous,

    J'ai une Mapview je souhaite afficher dessus des GeoPoint.
    Je recupere les GeoPoint a partir d'un JSON.
    Dans ce flux JSON j'ai plus de 1000 GeoPoint.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
        protected List<GeoPoint> doInBackground(String... params)
        {
        	String objet;
     
    		try {
    			objet = getStringContent("http://URL");
     
    			JSONObject jObject= new JSONObject(objet);
    			JSONObject debutObject = jObject.getJSONObject("debut");
    			//JSONObject jsaAnnonceObject=debutObject.getJSONObject("annonce");	
     
    			JSONArray jsaNegos=debutObject.getJSONArray("personne");	
    			arrayListNego=getArrayStringFromJSONArray(jsaNegos);
     
    			for (int i = 0; i < arrayListNego.size(); i++) {
    				Log.i("lol", jsaNegos.getJSONObject(i).getString("nom"));
     
    				String lat=(jsaNegos.getJSONObject(i).getString("latitude"));
    				String lg=(jsaNegos.getJSONObject(i).getString("longitude"));
     
    				double latitude =0;
    				double longitude = 0;
    				try
    				{			
    					latitude=Double.parseDouble(lat.toString());
    					longitude=Double.parseDouble(lg.toString());
    				}
    				catch (NumberFormatException e) {
    					// TODO: handle exception
    				}			
     
     
     
     
    				//GeoPoint point = new GeoPoint((int)(latitude * 1e6),(int)(longitude * 1e6));
     
     
    			//	geoPointsArray.add(point);
     
    			}
     
     
    		} catch (Exception e) {
     
    		}
     
     
            return geoPointsArray;
        }
    le code ci-dessus me pose problème car effectivement , je ne peux me permettre d'instancier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //GeoPoint point = new GeoPoint((int)(latitude * 1e6),(int)(longitude * 1e6));
    à chaque fois car le téléphone va exploser ...

    Je ne trouve pas de solution pour avoir une unique instance de GeoPoint et setté les nouvelle coordonnée pour mettre ce point ds la liste...



    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Tu veux faire quoi de ces geopoints ?

    Si c'est pour des question mémoire, 1000 x 2 doubles ne me semblent pas très énorme (10Ko à tout casser !!)....

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 116
    Par défaut
    en réalité la ligne d'instanciation des GeoPoint est décommenté !
    je veux pouvoir les afficher sur la carte simplement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //GeoPoint point = new GeoPoint((int)(latitude * 1e6),(int)(longitude * 1e6));
    et c'est bien ces 1000 instanciations qui mettent le téléphone en difficulté...

    Merci de votre aide.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut
    Bonjour ,

    Je ne comprend pas bien bien la demande (le téléphone va exploser?) !
    Il va exploser mais il fait son boulot ? ou il plante ?


    Mais si tu fait comme sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Override
     public void onLocationChanged(Location location)
     {
     lat = location.getLatitude();
     lng = location.getLongitude();
     Toast.makeText(getBaseContext(),
     "Location change to : Latitude = " + lat + " Longitude = " + lng,
     Toast.LENGTH_SHORT).show();
     GeoPoint p = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
     mapController.setCenter(p);
     }
    ou une chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Double lat = (location.getLatitude()) *1E6;
    Double lng = (location.getLongitude()) * 1E6;
    GeoPoint p = new GeoPoint(lat.intValue() , lng.intValue());
    mapController.setCenter(p);
    Il va prendre ta current location , et va t'afficher dans un Toast ta position , va se repositionné sur ta place et centrer sur la map (google) ou tu te trouve. Pourquoi "Double ? : pour définir un flottant, sinon je pense qu'il déclare en Int , et une position GPS étant assez "complexe" (du style : 43.129546146 )

    ps : la géolocalisation n'est pas mon cœur de travail par contre ..

    Cordialement ,

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Peut-être que cela vient du fait que tu déclares autant de GeoPoint qu'il y a d'itérations dans ta boucle.

    Si tu fais un truc dans le genre, tu as le même soucis ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (int i = 0; i < arrayListNego.size(); i++) {
         // Le reste du code
     
        geoPointsArray.add(new GeoPoint((int)(latitude * 1e6),(int)(longitude * 1e6)));
    }
    Et si jamais tu as besoin de ton point pour plusieurs choses, tu le déclares une fois en dehors de la boucle, et tu réutilises ta variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    GeoPoint point;
    for (int i = 0; i < arrayListNego.size(); i++) {
         // Le reste du code
     
         point = new GeoPoint((int)(latitude * 1e6),(int)(longitude * 1e6));
         // trucs a faire sur "point"
         geoPointsArray.add(point);
    }
    Mako.

  6. #6
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    La remarque de Mako 5013 peut être intéressant pour la gestion de ton garbage collector .

    Après ton problème est sur l'affichage ou sur la récupération des données. Car si tu affiches tes 1000 GeoPoints sur ta MapView cela doit effectivement le faire "planté" ?

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 116
    Par défaut
    Merci, Effectivement Mako ma permis de résoudre en partit un problème de ralentissement.
    Cependant j'ai abandonné l'idée d'afficher plus de 1000 points sur la carte car l'affichage de autant de point prend énormément de temps, je me contente donc d'afficher les points autour de la position de l'utilisateur.

Discussions similaires

  1. Connaissez-vous LUA ? un language interprété utilisé dans de nombreux jeux
    Par zMurfs dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 18/05/2006, 22h34
  2. Nombreux champs
    Par LEF97 dans le forum Requêtes
    Réponses: 7
    Dernier message: 15/03/2006, 12h47
  3. nombreux problèmes sur mon menu de gauche
    Par pp51 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/12/2005, 21h00
  4. VALUES (...nombreux SELECTS...)
    Par DrSlump dans le forum Langage SQL
    Réponses: 4
    Dernier message: 04/03/2005, 09h50
  5. nombreux plantage JbuilderX et 2005
    Par inertia dans le forum JBuilder
    Réponses: 4
    Dernier message: 24/11/2004, 18h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo