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

Composants graphiques Android Discussion :

MapView dans Dialog : RejectedExecutionException


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Par défaut MapView dans Dialog : RejectedExecutionException
    Bonjour
    J'affiche une MapView dans une Dialog.
    C'est une MapView OsmDroid mais ça fonctionne de la même manière qu'une MapView Google.
    Elle fonctionne bien, avec un fond de carte et un marker mis à jour en fonction de la position gps.
    Par contre, lorsque je la ferme avec le bouton de retour et que je l'ouvre à nouveau, les carré de carte ne sont plus chargés et des warnings sont lancés :
    RejectedExecutionException
    org.osmdroid.tileprovider.modules.MapTileModuleProviderBase(30400):
    org.osmdroid.tileprovider.modules.MapTileModuleProviderBase.loadMapTileAsync(MapTileModuleProviderBase.java:119)
    org.osmdroid.tileprovider.MapTileProviderArray.getMapTile(MapTileProviderArray.java:117)
    org.osmdroid.views.overlay.TilesOverlay$1.handleTile(TilesOverlay.java:167)
    org.osmdroid.views.MapView.dispatchDraw(MapView.java:867)
    org.osmdroid.tileprovider.modules.MapTileModuleProviderBase(30400): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
    ...

  2. #2
    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,

    Si on regarde le code source directement :
    http://code.google.com/p/osmdroid/so...ase.java?r=938

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      synchronized (mPending) {
                            // this will put the tile in the queue, or move it to the front of
                            // the queue if it's already present
                            mPending.put(pState.getMapTile(), pState);
                    }
                    try {
                            mExecutor.execute(getTileLoader());
                    } catch (RejectedExecutionException e) {
                            logger.warn("RejectedExecutionException", e);
                    }
    et

    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
    public MapTileModuleProviderBase(final int pThreadPoolSize, final int pPendingQueueSize) {
                    mExecutor = Executors.newFixedThreadPool(pThreadPoolSize,
                                    new ConfigurablePriorityThreadFactory(Thread.NORM_PRIORITY, getThreadGroupName()));
     
                    mWorking = new ConcurrentHashMap<MapTile, MapTileRequestState>();
                    mPending = new LinkedHashMap<MapTile, MapTileRequestState>(pPendingQueueSize + 2, 0.1f,
                                    true) {
     
                            private static final long serialVersionUID = 6455337315681858866L;
     
                            @Override
                            protected boolean removeEldestEntry(
                                            final Map.Entry<MapTile, MapTileRequestState> pEldest) {
                                    return size() > pPendingQueueSize;
                            }
                    };
            }
    Du coup mExecutor à comme fonction execute
    http://javasourcecode.org/html/open-...utor.java.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void execute(Runnable command) {
            if (command == null)
                throw new NullPointerException();
            if (poolSize >= corePoolSize || !addIfUnderCorePoolSize(command)) {
                if (runState == RUNNING && workQueue.offer(command)) {
                    if (runState != RUNNING || poolSize == 0)
                        ensureQueuedTaskHandled(command);
                }
                else if (!addIfUnderMaximumPoolSize(command))
                    reject(command); // is shutdown or saturated
            }
        }
    et voici son descriptif
    * @param command the task to execute
    * @throws RejectedExecutionException at discretion of
    * <tt>RejectedExecutionHandler</tt>, if task cannot be accepted
    * for execution
    * @throws NullPointerException if command is null
    */
    tu coup cela veut dire que ta commande n'a pas été accepté donc cette condition n'est pas respecté :
    if (runState == RUNNING && workQueue.offer(command))
    On dirait que tu as un problème sur ce Thread qui s'est mal terminé ou n'a pas encore eu le temps, pourrais ton voir comment tu nettoies ta map avant de la reconstruire ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Par défaut
    En fait je ne fait pas de nettoyage.
    J'ai une classe étendant Dialog que j'affiche depuis l'activité avec la méthode "show".
    Ci-dessous le constructeur de la Dialog, comment nettoyer ?

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public PositionDial(final Context context) {
    		super(context);
    		// layout
    		setContentView(R.layout.dial_position);
    		// map
    		mapView = (MapView) findViewById(R.id.positionMap);
    		mapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);
    		mapView.setBuiltInZoomControls(true);
    		mapView.setMultiTouchControls(true);
    		// overlays
    		List<Overlay> overlays = mapView.getOverlays();
    		markerOverlay = new ItemizedIconOverlay<OverlayItem>(context,
    				new ArrayList<OverlayItem>(), null);
    		overlays.add(markerOverlay);
    	}

  4. #4
    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,

    Essaye de réinitialisé ta MapView ( ou View) cela peut corriger peut être le problème.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 334
    Par défaut
    Merci pour tes réponses.
    J'ai essayé d'ajouter ça :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @Override
    public void onStart() {
    	mapView.refreshDrawableState();
    	super.onStart();
    }
    Les cases se sont mises à jour à la première ouverture, mais même problème à la seconde.
    J'ai aussi essayé de régler le souci en détruisant complètement la dialog lors de la fermeture :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @Override
    public void onStop() {
    	try {
    		this.finalize();
    	} catch (Throwable e) {
    		e.printStackTrace();
    	}
    }
    Mais ça ne marche pas et je pense que ça ne serait pas très économe en chargement.

Discussions similaires

  1. Affichage AJAX dans dialog
    Par arrindos dans le forum jQuery
    Réponses: 1
    Dernier message: 24/02/2012, 22h04
  2. input dans dialog jquery
    Par albedo0 dans le forum jQuery
    Réponses: 3
    Dernier message: 15/06/2010, 16h15
  3. formulaire dans dialog
    Par nicerico dans le forum jQuery
    Réponses: 2
    Dernier message: 19/08/2009, 13h34
  4. [c++]Affichage page HTML dans dialog
    Par Guillaume602 dans le forum Windows
    Réponses: 3
    Dernier message: 09/01/2006, 18h42
  5. [MFC] Débutant | Grille dans dialog Box
    Par Hannubis dans le forum MFC
    Réponses: 3
    Dernier message: 06/12/2005, 09h04

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