CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: 9mm con ben 3 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 8 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 29 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 1 su 1
Discussione:

[Eclipse+adt] Dubbi Connession ad un Web Service

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    Aug 2010
    Messaggi
    23

    Ringraziamenti
    1
    Ringraziato 0 volte in 0 Posts
    Predefinito

    [Eclipse+adt] Dubbi Connession ad un Web Service

    Ciao ragazzi,
    sto cercando di connettermi ad un web service tramite SOAP. Per farlo sto usando le librerie ksoap2

    L'idea è passare latitudine, longitudine e un range quando chiamo il Web Service, per ottenere dei dati che dovrò visualizzare su una google map.

    Il web service si trova su un altro computer che lo ha deployato correttamente su GlassFish. E' stato testato e funziona.

    Ora lo vorrei chiamare con Android, nell'attività principale, Il WS restituisce una List di HashMap tramite un metodo apposito.

    Ecco il codice significativo del WS, notate il metodo getRangePoi che torna una List di HasMap

    codice:
    package integration;
    
    import dao.PoiDao;
    import domain.POI;
    import org.springframework.remoting.jaxrpc.ServletEndpointSupport;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    
    /* Classe che implementa il web service */
    
    public class PoiServiceWS extends ServletEndpointSupport {
    
        private PoiDao poiDao;     // Dichiaro una variabile di tipo PoiDao generico
    
        /* Metodo chiamato per effettuare l'inizializzazione personalizzata dopo che
         * è stato specificato il contesto */
        @Override
        protected void onInit() {
            poiDao = (PoiDao)getWebApplicationContext().getBean("poiDao");
        }
    
        public List<HashMap>getRangePoi(String lon,String lat,String range)
        {
            System.out.println("Attenzione "+lon+" lat "+lat+" range "+range);
          return poiDao.getRangePoi(Float.parseFloat(lon), Float.parseFloat(lat), Integer.parseInt(range));
        }
    
        /* Metodo che restituisce tutti i POI */
        public List<HashMap>allPois(){
    
            // Crea una lista di generici ogetti POI
            List<POI> results = new ArrayList<POI>();
            //if(id!=null&&!id.equals(""))
            //    results=poiDAO.getPoi(id);
            //else
    
            /* Mette dentro result il riferimento ad una lista di POI restituita dal
             * metodo getListPoi del DAO */
            results = poiDao.getListPoi();
    
            // Crea una lista di oggetti generici di tipo HashMap (chiave, valore)
            List<HashMap> mappaOut=new ArrayList<HashMap>();
            
            // Per ogni oggetto poi contenuto nella lista result 
            for(POI poi:results){
    
                // Crea un nuovo oggetto mappaPoi di tipo HashMap (chiave, valore)
                HashMap mappaPoi=new HashMap();
    
                // Setta i campi dell'oggetto mappaPoi appena creato
                mappaPoi.put("nome",poi.getNome());
                mappaPoi.put("lat",poi.getLat());
                mappaPoi.put("lon",poi.getLon());
                mappaPoi.put("alt",poi.getAlt());
                mappaPoi.put("tipologia",poi.getTipologia());
                mappaPoi.put("wikilink",poi.getWikiLink());
                //mappaPoi.put("poiId",poi.getPoiId()); ?!?!
                mappaPoi.put("id",poi.getId());
    
                // Aggiungi l'oggetto Hash Map appena creato alla lista dei POI
                mappaOut.add(mappaPoi);
            }
    
            // Ritorna al chiamante la lista che contiene gli ogetti HashMap che rappresentano i POI
            return mappaOut;
        }
    }
    L'attività Android è questa, vi posto il codice significativo:

    codice:
    import org.ksoap2.SoapEnvelope;
    import org.ksoap2.serialization.SoapObject;
    import org.ksoap2.serialization.SoapSerializationEnvelope;
    import org.ksoap2.transport.AndroidHttpTransport;
    .
    .
    .//vari metodi onCreate() e onStart()
    .
    .
    //--inizio: qui faccio la chimata al WS
        public void onResume(){
                super.onResume();
                
                Criteria criteria = new Criteria();  
                criteria.setAccuracy(Criteria.ACCURACY_FINE);
                String provider = locationManager.getBestProvider(criteria, true);  
                //se la posizione dell'utente è stata inizializzata (o cmq esiste) 
            if(locationManager.getLastKnownLocation(provider) != null){
                    //passo longitudine,latitudine e range
                    Location l = locationManager.getLastKnownLocation(provider);
                    double myLon = l.getLatitude();
                    double myLat = l.getLongitude();
                    int myRange = GuidaSubActivity.getRange();
                    /* il meteodo getPois() fa la chiamata al web service */
                          getPois(myLon,myLat,myRange);
                                   //userò i dati qui
                          }
        }//--fine 
    
    .
    .
    .
    public void getPois(double userLon, double userLat, int userRange){
                Toast.makeText(this, "Loading POIs..", Toast.LENGTH_LONG).show();
                //soap_action: non passo niente cioè ""
                //method name: passo nome metodo getRangePoi
                //name_space: è http://example
                //URL : è l'indirizzo del wsdl ma senza ?wsdl
                //ok
                String SOAP_ACTION = "";
                //ok
                String METHOD_NAME = "http://localhost:8080/InsertPoi/services/PoiServiceWS?method=getRangePoi";
                //ok
                String NAMESPACE = "http://example";
                //ok
                String URL = "http://192.168.1.4:8080/InsertPoi/services/PoiServiceWS";            
            try{          
                 SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
                 //request.addProperty("ssn", ssn);
                 request.addProperty("userLon",userLon);
                 request.addProperty("userLat",userLat);
                 request.addProperty("userRange",userRange);
                 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                 envelope.setOutputSoapObject(request);
                 AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL);
                 try 
                    {
                        androidHttpTransport.call(SOAP_ACTION, envelope);
                        resultsRequestSOAP =  envelope.getResponse();
                        String[] results = (String[])  resultsRequestSOAP;
                    }
             catch (Exception aE)
                     {
                            aE.printStackTrace ();;
                     }
                 Toast.makeText(this, "POIs obtained!", Toast.LENGTH_LONG).show();
    
                        }catch(Exception bE){bE.printStackTrace();} 
        }
    Al di là del fatto che non sono sicuro che la connessione sia andata liscia così come la ricezione dei dati ottengo dal logcat questo WARNING:

    codice:
    09-16 09:17:37.309: WARN/System.err(295): java.lang.RuntimeException: Cannot serialize: 41.89016776666667
    09-16 09:17:37.329: WARN/System.err(295):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:629)
    09-16 09:17:37.329: WARN/System.err(295):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeProperty(SoapSerializationEnvelope.java:613)
    09-16 09:17:37.329: WARN/System.err(295):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:582)
    09-16 09:17:37.329: WARN/System.err(295):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:566)
    09-16 09:17:37.329: WARN/System.err(295):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:623)
    09-16 09:17:37.329: WARN/System.err(295):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeBody(SoapSerializationEnvelope.java:547)
    09-16 09:17:37.329: WARN/System.err(295):     at org.ksoap2.SoapEnvelope.write(SoapEnvelope.java:192)
    09-16 09:17:37.329: WARN/System.err(295):     at org.ksoap2.transport.Transport.createRequestData(Transport.java:74)
    09-16 09:17:37.339: WARN/System.err(295):     at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:58)
    09-16 09:17:37.339: WARN/System.err(295):     at mieapplicazioni.guidageoreferenziata.GuidaGeoReferenziata.getPois(GuidaGeoReferenziata.java:276)
    09-16 09:17:37.339: WARN/System.err(295):     at mieapplicazioni.guidageoreferenziata.GuidaGeoReferenziata.onResume(GuidaGeoReferenziata.java:137)
    09-16 09:17:37.339: WARN/System.err(295):     at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)
    09-16 09:17:37.339: WARN/System.err(295):     at android.app.Activity.performResume(Activity.java:3823)
    09-16 09:17:37.339: WARN/System.err(295):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3118)
    09-16 09:17:37.339: WARN/System.err(295):     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3143)
    09-16 09:17:37.339: WARN/System.err(295):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2059)
    09-16 09:17:37.339: WARN/System.err(295):     at android.os.Handler.dispatchMessage(Handler.java:99)
    09-16 09:17:37.339: WARN/System.err(295):     at android.os.Looper.loop(Looper.java:123)
    09-16 09:17:37.339: WARN/System.err(295):     at android.app.ActivityThread.main(ActivityThread.java:4627)
    09-16 09:17:37.339: WARN/System.err(295):     at java.lang.reflect.Method.invokeNative(Native Method)
    09-16 09:17:37.339: WARN/System.err(295):     at java.lang.reflect.Method.invoke(Method.java:521)
    09-16 09:17:37.339: WARN/System.err(295):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    09-16 09:17:37.339: WARN/System.err(295):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    09-16 09:17:37.339: WARN/System.err(295):     at dalvik.system.NativeStart.main(Native Method)
    Come posso modificare il metodo getPois per gestire la List di HasMap e cosa vuol dire quel WARNING?

  2.  

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy