Autore Topic: Request con ksoap2  (Letto 725 volte)

Offline rocco_fun90

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s3
  • Sistema operativo:
    Windows xp
Request con ksoap2
« il: 12 Dicembre 2012, 15:18:10 CET »
0
Ciao a tutti ragazzi, sono nuovo del forum, mi sto accingendo a sviluppare una applicazione per android che utilizza un web service.
In particolare una parte del codice xml che utilizzo per la richiesta è così fatto:
<tag:reteLogistica>RLM</tag:reteLogistica>
<tag:identificativo>
               <!--Zero or more repetitions:-->
               <tag:int>3265</tag:int>
   </tag:identificativo>


Quando nel codice java creo la request scrivo:
            request.addProperty("reteLogistica", "RLM");
            PropertyInfo id=new PropertyInfo();
            id.setType("int");
            id.setValue("3265");
            request.addProperty("identificativo", id);

ma inevitabilmente mi dà eccezione, forse perchè le request con i tipi complessi forse non si fanno così.
Chi mi può aiutare.
Grazie Mille.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Request con ksoap2
« Risposta #1 il: 12 Dicembre 2012, 15:59:22 CET »
0
Ammetto di sapere molto poco sull'argomento, ma potrebbe aiutarmi vedere i dettagli dell'eccezione se puoi postarli.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline rocco_fun90

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s3
  • Sistema operativo:
    Windows xp
Re:Request con ksoap2
« Risposta #2 il: 12 Dicembre 2012, 16:22:56 CET »
0
Grazie per l'interessamento mi spiego meglio postando tutto il codice:
Codice (Java): [Seleziona]
public class SoapClient extends Activity {
    /** Called when the activity is first created. */
        private static final String METHOD_NAME = "xxxxx";
        private static final String NAMESPACE = "xxxx";
        private static final String URL = "xxxx";
        private static final String SOAP_ACTION = "xxxx";  
        TextView tv;
       
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv=(TextView)findViewById(R.id.result);
        /*il metodo seguente invoca il metodo doInBackground dell'AsyncTask
        la risposta di quest'ultimo provoca automaticamente l'invocazione del metodo
        onPostExecute che stampa la risposta*/

        new EseguiRichiesta().execute("");
    }
   
    private class EseguiRichiesta extends AsyncTask<String, Void, String>
    {
         @Override
        protected String doInBackground(String... params)
         {             
            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);  
           
            request.addProperty("ReteLogistica", "RLM");
            request.addProperty("int", 3265);
             //request.addProperty("istanteInizio", "2012-11-26");
             //request.addProperty("istanteFine", "2012-11-29");
           
             final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
             envelope.dotNet=true;
             envelope.setAddAdornments(false);
             envelope.implicitTypes=true;        
             envelope.setOutputSoapObject(request);
               
             HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
             String risultato="";
             try {
                        androidHttpTransport.call(SOAP_ACTION, envelope);
                        SoapObject resultsRequestSOAP = null;
                        if( envelope.getResponse()!=null)
                                resultsRequestSOAP = (SoapObject) envelope.getResponse();
                       
                        //accedo alla properti che mi interessa e cioè descrizione esito
                        /*SoapObject ris= (SoapObject) resultsRequestSOAP.getProperty(2);
                        risultato=ris.getProperty(1).toString();*/

                       
                        risultato=resultsRequestSOAP.getProperty(1).toString();
             }catch (IOException e) {
                          tv.setTextColor(Color.RED);
                  tv.setText(e.toString());                    
             }catch (XmlPullParserException e) {
                          tv.setTextColor(Color.RED);
                  tv.setText(e.toString());  
             }
             return risultato;
         }
         @Override
            protected void onPostExecute(String result) {
              tv.setText(result);
            }
    }
}

Questo invece è l'xml aperto con soapUI
Codice (XML): [Seleziona]
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mio="xxxxx">
   <soapenv:Header/>
   <soapenv:Body>
      <mio:getPosizioneCorrenteVeicolo>
         <!--Optional:-->
         <mio:vehicleId>
            <mio:reteLogistica>RLM</mio:reteLogistica>
            <!--Optional:-->
            <mio:identificativo>
               <!--Zero or more repetitions:-->
               <mio:int>3265</mio:int>
            </mio:identificativo>
         </mio:vehicleId>
      </mio:getPosizioneCorrenteVeicolo>
   </soapenv:Body>
</soapenv:Envelope>

Ho effettuatop request ad altre funzioni dove però i parametri erano oggetti semplici come in questo caso della reteLogistica.
Credo che il problema sia quell'identificativo 3265 (in quanto è un tipo complesso identificativo-->int-->3265).
Purtroppo è la prima volta che faccio queste request quindi mi servirebbe aiuto.

Offline rocco_fun90

  • Utente junior
  • **
  • Post: 61
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy s3
  • Sistema operativo:
    Windows xp
Re:Request con ksoap2
« Risposta #3 il: 12 Dicembre 2012, 16:30:05 CET »
0
In pratica va in eccezione su envelope.getResponse(), perchè credo che per come viene formulata la request il web service non è in grado di rispondere.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Request con ksoap2
« Risposta #4 il: 12 Dicembre 2012, 17:23:22 CET »
0
Puoi postare il testo dell'eccezione come ti appare nel LogCat?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store