Autore Topic: Problema inserimento Pipoint in mappa  (Letto 649 volte)

Offline darkmax

  • Utente junior
  • **
  • Post: 63
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Problema inserimento Pipoint in mappa
« il: 19 Gennaio 2012, 17:43:45 CET »
0
Salve a tutti.. Ho questo codice per inserire un pinpoint su di una mappa google. C'è un AsyncTask che prende dati da un xml esterno.. Le coordinate le valorizza ma non viene inserito nulla.. Ora gli ho passato 2 coordinate a mano ma non va comunque..  Perchè? Il tutto è nel metodo onPostExecute(essendo un AsyncTask)..

Codice: [Seleziona]
package it.program.max;


import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;

import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.util.Log;

public class MyAsynTask extends AsyncTask<Context, Integer, String> {
       
        private Context myContext = null;

        private final String MY_DEBUG_TAG = "Prova";
        private final String LIST_TAG = "Lista";
        private ArrayList<ParsedExampleDataSet> list = new ArrayList<ParsedExampleDataSet>();

        @Override
        protected String doInBackground(Context... params) {
               
        try {
                /* Create a URL we want to load some xml-data from. */
                URL url = new URL("http://opendata.5t.torino.it/get_pk");
                myContext = params[0];

                /* Get a SAXParser from the SAXPArserFactory. */
                SAXParserFactory spf = SAXParserFactory.newInstance();
                SAXParser sp = spf.newSAXParser();

                /* Get the XMLReader of the SAXParser we created. */
                XMLReader xr = sp.getXMLReader();
                /* Create a new ContentHandler and apply it to the XML-Reader*/
                ExampleHandler myExampleHandler = new ExampleHandler();
                xr.setContentHandler(myExampleHandler);
               
                /* Parse the xml-data from our URL. */
                xr.parse(new InputSource(url.openStream()));
                /* Parsing has finished. */
                 
                list = myExampleHandler.getParsedData();
                               
        } catch (Exception e) {
                /* Display any Error to the GUI. */
                Log.e(MY_DEBUG_TAG, "QueryError", e);
        }       
                return "123";
        }
        @Override
        protected void onPostExecute(String result) {
                super.onPostExecute(result);
                Activity activity=(Activity)myContext;
                MapView m = (MapView) activity.findViewById(R.id.mvMain);
                List<Overlay> overlayList = m.getOverlays();
                Drawable d = activity.getResources().getDrawable(R.drawable.parking);
                CustomPinPoint custom = new CustomPinPoint(d, myContext);
               
                Log.d(LIST_TAG , ""+ list.size());
               
                Iterator<ParsedExampleDataSet> itr = list.iterator();
                while(itr.hasNext()){
               
                        ParsedExampleDataSet p = itr.next();
                /*       
                int x = (int)(p.getExtractedLat()*1E6);
                int y = (int)(p.getExtractedLng()*1E6);
                GeoPoint touchedPoint = m.getProjection().fromPixels(x, y);
                */
                        int lat = (int)(45.072187*1E6);
                int lng = (int)(7.684507*1E6);
                }       
                        GeoPoint touchedPoint = new GeoPoint(45072187, 7684507);
                       
                OverlayItem overlayItem = new OverlayItem(touchedPoint, "Prova", "Stringa");
                custom.insertPinpoint(overlayItem);
               
                overlayList.add(custom);
               

        }

}

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problema inserimento Pipoint in mappa
« Risposta #1 il: 19 Gennaio 2012, 18:22:50 CET »
0
Io se fossi in te sposterei nel doInBackground anche il parsing dell'xml :)
Comunque, io ho seguito quanto scritto nella documentazione (ovvero andando a creare una apposita implementazione dell'interfaccia ItemizedOverlay, ecc ecc) e non ho avuto problemi. Hai per caso provato?

Hello, MapView  | Android Developers

Offline darkmax

  • Utente junior
  • **
  • Post: 63
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Re:Problema inserimento Pipoint in mappa
« Risposta #2 il: 19 Gennaio 2012, 19:29:16 CET »
0
Ma il parsing va.. qui non va neanche passandogli la latitudine e la longitudine esplicitamente.

Ho guardato quella guida e fa tutte le cose che ho fatto io..

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problema inserimento Pipoint in mappa
« Risposta #3 il: 19 Gennaio 2012, 19:34:56 CET »
0
Ma il parsing va.. qui non va neanche passandogli la latitudine e la longitudine esplicitamente.

Si il mio consiglio sul parsing era solo un discorso di ottimizzazione delle performances.

Citazione
Ho guardato quella guida e fa tutte le cose che ho fatto io..

Evidentemente non tutte ;)
Io comunque credo che tu debba aggiungere un tuo overlay sulla mappa, se vai a prendere quelli che già ci sono e gli aggiungi degli items magari non vengono disegnati. (vedi metodo populate())
Ad esempio, cosa fa la classe CustomPinPoint?
« Ultima modifica: 19 Gennaio 2012, 19:37:12 CET da Ricky` »

Offline darkmax

  • Utente junior
  • **
  • Post: 63
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Re:Problema inserimento Pipoint in mappa
« Risposta #4 il: 20 Gennaio 2012, 09:41:57 CET »
0
ecco la classe che estende ItemizedOverlay:

Codice: [Seleziona]
package it.program.max;

import java.util.ArrayList;

import android.app.AlertDialog;
import android.content.Context;
import android.graphics.drawable.Drawable;

import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;

public class CustomPinPoint extends ItemizedOverlay<OverlayItem> {
       
        private ArrayList<OverlayItem> pinpoints = new ArrayList<OverlayItem>();
        private Context c;

        public CustomPinPoint(Drawable defaultMarker) {
                super(boundCenter(defaultMarker));
                // TODO Auto-generated constructor stub
        }
       
        public CustomPinPoint(Drawable m, Context context) {
                // TODO Auto-generated constructor stub
                super(m);
                c = context;
        }

        @Override
        protected OverlayItem createItem(int i) {
                // TODO Auto-generated method stub
                return pinpoints.get(i);
        }

        @Override
        public int size() {
                // TODO Auto-generated method stub
                return pinpoints.size();
        }
       
        public void insertPinpoint(OverlayItem item){
                pinpoints.add(item);
                this.populate();
        }
       
        public void addOverlay(OverlayItem overlay){
                pinpoints.add(overlay);
                populate();
        }

        @Override
        protected boolean onTap(int index) {
                // TODO Auto-generated method stub
                OverlayItem item = pinpoints.get(index);
                AlertDialog.Builder dialog = new AlertDialog.Builder(c);
                dialog.setTitle(item.getTitle());
                dialog.setMessage(item.getSnippet());
                dialog.show();
                return super.onTap(index);
        }
       
       

}

A me sembra tutto a posto..

Offline darkmax

  • Utente junior
  • **
  • Post: 63
  • Respect: 0
    • Mostra profilo
    • Emoe - Agenzia di comunicazione Torino
  • Dispositivo Android:
    Samsung Galaxy S 3
  • Sistema operativo:
    Mac OS X
Re:Problema inserimento Pipoint in mappa
« Risposta #5 il: 20 Gennaio 2012, 15:33:08 CET »
0
help!