Ciao a tutti,
ho cercato in altre discussioni ma non ho trovato un esempio di collegamento ad un web service con android.
Qualcuno può mostrarmi in esempio di codice di collegamento ad un web service?
Uso eclipse..
grazie
Visualizzazione stampabile
Ciao a tutti,
ho cercato in altre discussioni ma non ho trovato un esempio di collegamento ad un web service con android.
Qualcuno può mostrarmi in esempio di codice di collegamento ad un web service?
Uso eclipse..
grazie
Innanzituto ti conviene verificare che ci sia
- un collegamento dati (linea telefonica) attivo
- oppure un collegamento WiFi attivo
Per fare quanto sopra, ricordati di abilitare nel file AndroidManifest.xml:
Poi, come fai il trasferimento dati? Xml, come faccio io?codice:<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Ti conviene usare le classi
...e questo è un esempio di codice:codice:private ConnectivityManager conn_manager;
private HttpClient http_client;
private HttpPost http_post;
private HttpResponse http_response;
...ricordati di NON usare i miei login+password ;)codice:public void onCreate(Bundle savedInstanceState) {
conn_manager = (ConnectivityManager)getSystemService(getApplicationContext().CONNECTIVITY_SERVICE);
http_client = new DefaultHttpClient();
}
public void Connetti_A_WebService() {
// variabili che mi serviranno tra poco
String risultato = "";
String errore = "";
// devo creare l'Xml da inviare al server
String xml_utente = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
xml_utente += "<utente>";
xml_utente += "<login>" + login + "</login>";
xml_utente += "<password>" + password + "</password>";
xml_utente += "</utente>";
// proviamo l'invio
try {
http_post = new HttpPost( "http://www.microsoft.com/TheCopacabanaMan/WebService/login_to_sharepoint.aspx");
StringEntity string_entity = new StringEntity(xml_utente, HTTP.UTF_8);
string_entity.setContentType("text/xml");
http_post.setEntity(string_entity);
http_response = http_client.execute(http_post);
HttpEntity res_Entity = http_response.getEntity();
risultato = EntityUtils.toString(res_Entity );
}
catch(Exception ex) {
// managgia! abbiamo ottenuto un errore!
errore = ex.getMessage() + "\r\n" + risultato;
}
}
...e per permettere al tuo dispositivo di comunicare via internet, ricordati di abilitare nel file AndroidManifest.xml:
Quanto mi devi per la consulenza? Una cioccolata calda? Accettata! :)codice:<uses-permission android:name="android.permission.INTERNET" />
Non è meglio una buona birra??
Il tuo esempio funziona ma io voglio passare dal soap per varie ragioni come che dall'altra parte mi aspettano web service .net.
Per oggi però non ne ho più.. Domani mi metto sotto e ti aggiorno. Tu non lo usi il soap?
Ti è mai uscito quest'errore?
expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG <head>@1.6 in java.io.InputStreamReader
Stai usando un WebServer scritto in Php?
In alternativa, sei sicuro che il file Xml sia ben formattato?
eh ti ho risp ma devo essere approvato dal moderatore..
cmq no e in aspx..
Se fornissi un esempio di risposta forse saremmo in grado di aiutarti meglio.
Ciao anche a te Andrea.
La risposta del web service e quindi l'errore che mi da è proprio quello scritto in precedenza:
expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG <head>@1.6 in java.io.InputStreamReader
Non è che per caso le classi 'web' devono star in un altro posto? Credo proprio di no...
In allegato c'è il mio project se gentilmente provate a caricarlo..
C'è solo una classe e il main.xml.
Il web service se lo provate dal browser risponde benissimo.
passando il cap della città restituisce il tempo, umidità e altre cose..
Non riesco proprio a capire cosa sbaglio, sono in crisi.
La libreria che ho scaricato è la ksoap2 e l'ho messa come external jar nel project.
Vi inserirei il codice come ha fatto copacabanaMan in una finestra, ma davvero è il primo forum in cui mi iscrivo e non so neanche come si faccia a inserire il testo così.. mi dai due dritte anche per questo così evito gli allegati la prox volta?
Posso darvi altre info??
Grazie mille
Non saprei che risponderti.
Ho compilato il tuo codice, e ottengo un errore diverso.
Alla linea
ottengo l'eccezionecodice:androidHttpTransport.call(SOAP_ACTION, envelope);
java.net.SocketException: Permission denied
Andrea, che ne pensi?
...Andrea? Andreeeee-aaaaaaaaaahhhhh!
(si, quello dorme, a quest'ora...)
Ciao,
ma hai messo la libreria ksoap2?
Ovviamente si.
... a proposito, ho visto nel tuo progetto, che l'hai messa in una sottodirectory FUORI dal path di progettazione.
Sarebbe più opportuno metterla nella sottodirectory LIB del progetto, che devi creare appositamente
hei grazie per il consiglio..!!
ma come fare?
Creo la cartella lib sotto project, ma come mettere la libreria all'interno della cartella?
Ma a te sembra giusto il mio codice?
Il file .jar puoi copiarlo da FileSystem.
Poi, dentro Eclipse, clicchi sulla sottodirectroy "LIB" col pulsante destro, e scegli la voce "Refresh", così il progetto Eclipse sa che è "nato" un altro file.
Per il codice, non saprei, ad occhio non vedo errori, ma non mi si connette, come ti dicevo sopra
Ok ho messo la cartella lib con all'interno la libreria ksoap2.
Andrea dici che ci risponderà?
Non ne esco più da questo loop.
Ma mi è venuto un dubbio..
nel parametro SOAP_ACTION cosa bisogna mettere?
Ciao Copacapana,
ho modificato il codice così:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=(TextView)findViewById(R.id.text1);
call();
}
public void call()
{
try {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("XmlWhere", "'<ID>6813</ID>'");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
Toast.makeText(getApplicationContext(), URL,Toast.LENGTH_SHORT).show();
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapObject risposta = (SoapObject) envelope.getResponse();
int risultato = Integer.parseInt(risposta.getProperty(0).toString( ));
tv.setText(risultato);
}
catch (Exception e)
{
e.printStackTrace ();
}
}
e ora mi da quest'errore:
Server was unable to process request. --> Value cannot be null.\nParameter name: s
mai sentito?
Dai, zippa il progetto & allegalo, chè gli diamo un'occhiata
Ecco l'allegato..
non hai un web service su cui provare il codice?
Io ne ho provati due e niente.. però non vorrei che il problema fosse quello.
Prometto una cassa di birra........ :)
Grazie per l'aiuto..
La mia scadenza finisce oggi, salvami..
Ehm, sono in ufficio. Teoricamente dovrei lavorare...
Dammi un po' di info:
1. provi il codice sul Galaxy, oppure sull'emulatore?
2. (se sul Galaxy), il tablet è correttamente connesso ad internet, vero?
Scusami.. effettivamente..
lo provo sull'emulatore (samsung galaxy) e sul manifest metto il parametro che mi hai dato tu...
Altro dato che mi pare che con i 2 web service cambi qualcosa..per questo ti ho chiesto ti far un tentativo con un altro web service se riesci.
Chiedimi tutto quello che vuoi.. :p
Ho fatto un po' di prove, ed ottengo l'errore
Ho visto su Google che questo è un errore piuttosto diffuso, ma non sono riuscito a trovare una risposta che lo risolvesse.codice:android soap XmlPullParserException expected: START_TAG
Si infatti anche a me da questo errore con questo web service mentre con l'altro mi da:
Server was unable to process request. --> Value cannot be null.\nParameter name: s
Insomma non ci sto a capire più niente..