comment Appeler ksoap service web à partir d'android?
J'ai une petite confusion, dans notre application mobile une ksoap service web appelé à partir d'ios comme ci-dessous : et l'obtention de données correctement. Ici, dans le service web suivante, vous pouvez voir à partir de code suivant, il y a quelques paramètres à passer au service web.
-(void)callwebservice{
NSString *soapMessage = [NSString stringWithFormat:
@"<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><Calculate xmlns=\"http://tempuri.org/\"><inputRate>%@</inputRate><rateFrequency xmlns:a=\"http://schemas.datacontract.org/2004/07/FusionPeople.MobileContractor.DomainModel\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><a:RateFrequencyId>0</a:RateFrequencyId><a:RateFrequencyName>%@</a:RateFrequencyName></rateFrequency><nonTaxableExpense>%@</nonTaxableExpense><expenseFrequency xmlns:a=\"http://schemas.datacontract.org/2004/07/FusionPeople.MobileContractor.DomainModel\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><a:RateFrequencyId>0</a:RateFrequencyId><a:RateFrequencyName>%@</a:RateFrequencyName></expenseFrequency></Calculate></s:Body></s:Envelope>\n",txtinputrate.text,lblrate.text,txtexpenses.text,lblexpense.text
];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@MobileContractorCalculationService.svc",[MobileContractorAppDelegate getstrIpAddress] ]];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
NSString *msgLength = [NSString stringWithFormat:@"%d",[soapMessage length]];
[theRequest addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[theRequest addValue:@"http://tempuri.org/IMobileContractorCalculationService/Calculate" forHTTPHeaderField:@"SOAPAction"];
[theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
[theRequest setHTTPMethod:@"POST"];
[theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if( theConnection ){
webData = [NSMutableData data] ;
}
}
Et de l'autre côté, à côté android, j'ai essayé beaucoup de méthodes pour appeler ce service web et de transmettre des données de service web .Mais à chaque fois que je reçois de côté de serveur de code d'erreur: 415, Svp quelqu'un peut m'aider et me dire comment faire pour passer cette organisation hiérarchique des données pour ce type de ksoap service web....
J'ai essayé le code suivant :
try {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("inputRate", 1000);
SoapObject rate = new SoapObject(SOAP_ACTION, "rateFrequency");
PropertyInfo info = new PropertyInfo();
info.setName("RateFrequencyId");
info.setValue(0);
rate.addProperty(info);
PropertyInfo info2 = new PropertyInfo();
info2.setName("RateFrequencyName");
info2.setValue("Hourly");
rate.addProperty(info2);
request.addProperty("rateFrequency", rate);
request.addProperty("nonTaxableExpense", 500);
SoapObject exp = new SoapObject(SOAP_ACTION, "expenseFrequency");
PropertyInfo info3 = new PropertyInfo();
info3.setName("RateFrequencyId");
info3.setValue(0);
exp.addProperty(info3);
PropertyInfo info4 = new PropertyInfo();
info4.setName("RateFrequencyName");
info4.setValue("Hourly");
exp.addProperty(info4);
request.addProperty("expenseFrequency", exp);
Log.v("", "=========== Request : " + request);
SoapSerializationEnvelope envelope = new
SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try {
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
Log.v("myApp",
"========================== Res" + response.toString());
} catch (Exception e) {
e.printStackTrace();
}
Mais il se message d'erreur suivant :
09-09 14:33:18.054: V/(957): =========== Request : Calculate{inputRate=1000; rateFrequency=rateFrequency{RateFrequencyId=0; RateFrequencyName=Hourly; }; nonTaxableExpense=500; expenseFrequency=expenseFrequency{RateFrequencyId=0; RateFrequencyName=Hourly; }; }
09-09 14:33:30.264: W/System.err(957): java.io.IOException: HTTP request failed, HTTP status: 500
09-09 14:33:30.264: W/System.err(957): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:195)
09-09 14:33:30.264: W/System.err(957): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:116)
09-09 14:33:30.264: W/System.err(957): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:111)
09-09 14:33:30.264: W/System.err(957): at com.example.ksoapwebserviceexample.MainActivity.call(MainActivity.java:318)
09-09 14:33:30.264: W/System.err(957): at com.example.ksoapwebserviceexample.MainActivity$testReq.doInBackground(MainActivity.java:185)
09-09 14:33:30.264: W/System.err(957): at com.example.ksoapwebserviceexample.MainActivity$testReq.doInBackground(MainActivity.java:1)
09-09 14:33:30.274: W/System.err(957): at android.os.AsyncTask$2.call(AsyncTask.java:185)
09-09 14:33:30.274: W/System.err(957): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-09 14:33:30.274: W/System.err(957): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-09 14:33:30.274: W/System.err(957): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
09-09 14:33:30.274: W/System.err(957): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
09-09 14:33:30.274: W/System.err(957): at java.lang.Thread.run(Thread.java:1096)
- vous devez ajouter votre code ( le code de java, pas de l'ios ) , et la trace de la pile d'erreurs que vous avez obtenu, sinon, voici un tutoriel sur la façon d'utiliser ksoap2 : mirnauman.wordpress.com/2012/10/18/...
- le code affiché ne ressemble pas à du code java. ressemble liées à ios
- oui @Raghunandan en fait, j'ai posté est ios code et je m confondre comment l'utiliser avec andorid ?
- postez votre code android.
- j'ai posté mon code android veuillez actualiser la page
- cochez cette stackoverflow.com/questions/15809391/.... votre code a l'air bien
- SOAP (Simple Object Access Protocol) est un protocole pas de service
Vous devez vous connecter pour publier un commentaire.
essayer exemples Suivants.
ksoap-android-service web-tutoriel
android-appel-a-service web-aide-ksoap2-en passant-les valeurs-pour-un-web-service
Espère que cela permettra de résoudre votre problème
- Je utiliser la méthode suivante pour appeler ksoap web-servie
hconnection.setRequestProperty("Content-Type", "text/xml");
que mon webservice est prise en xml, donc j'ai défini le type de contenu au format xml.