Aller au contenu

service web et android


gaaloul

Recommended Posts

Bonjour,

Je développe une application sous android 1.5 qui consiste à appelé un service web. J'ai crée le service web et je l'ai testé avec soapUI il marche correctement.

Mon problème c'est dans l'application quand je debug il ne se passe rien quand je click sur le bouton qui appel le service, la console de debug reste bloqué sur ce message :

Attempting to connect debugger to 'com.kalydia' on port xxxx car à chaque fois il change de numéro du port.

Merci pour vos réflexions.

Vous trouverez ci-joint l'imprime écran du debug

Voila mon code il est très simple :

public class WS_SAP_activity extends Activity implements View.OnClickListener {

private static final String NAMESPACE = "urn:sap-com:document:sap:soap:functions:mc-style";

private static final String URL = "http://sap1.kalydia.local:8000/sap/bc/srt/rfc/sap/zwsuser/800/zwsuser/zwsuser";

private Button mButton; 

   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {

   	super.onCreate(savedInstanceState);

   	 mButton =(Button) findViewById(R.id.button1);

   	setContentView(R.layout.main);

   	mButton.setOnClickListener(this);

   }

   //public Button.OnClickListener btTestListener = new Button.OnClickListener() {
   // b.setOnClickListener(new Button.OnClickListener() {
   	@Override
   	public void onClick(View v) {
   		if (v == mButton)
   		{
              try {
                      // Create SOAP request
                      //SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
           	   final TextView tf= (TextView) findViewById(R.id.editText2);
           	   final TextView tf1 =(TextView) findViewById(R.id.editText2);
           	   SoapObject request = new SoapObject("urn:sap-com:document:sap:rfc:functions","Zmafonctionsws2");
           	   request.addProperty("Nom", tf);
                      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                      envelope.setOutputSoapObject(request);
                      HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
                      androidHttpTransport.call(null, envelope);
                      // Get response from envelope
                     // Object result = envelope.getResponse();
                      	SoapObject body = (SoapObject)envelope.bodyIn;
          				String result = (String)body.getProperty("WiCount").toString();
                      // Display result
          				tf1.setText(result);
                      Toast.makeText(WS_SAP_activity.this, result.toString(),50000).show();
              } catch (Exception e) {
                      e.printStackTrace();
              }
       }
   	}
}

Lien vers le commentaire
Partager sur d’autres sites

  • 3 weeks later...

Bonjour,

Comment l'avez-vous résolu ?

Je dois aussi faire appel à un soap service et parser les données dans mon application.

Du coup j'envoie l'enveloppe xml grace à une méthode :

public static String callWebServiceMethod(String login){
	HttpClient httpClient = new DefaultHttpClient();
	HttpPost httpPost = new HttpPost("monUrl/monService.php");
	String  webServiceXml = "";
	String  response = "";

	try
	{
	        webServiceXml += "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
	        webServiceXml += "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:urn=\"urn:monUrn\">\n";
	        webServiceXml +=  "<soapenv:Header/>\n";
	        webServiceXml +=  "<soapenv:Body>\n";
	        webServiceXml +=  "<urn:monService>\n";
	        webServiceXml +=  "<login>blabla</login>\n";
	        webServiceXml +=  "</urn:monService>\n";
	        webServiceXml +=  "</soapenv:Body>\n";
	        webServiceXml +=  "</soapenv:Envelope>\n";

	        httpPost.setHeader("Authorization","monAutorization");
	        httpPost.setHeader("content-type","text/xml; charset=ISO-8859-1");
	        httpPost.setHeader("SOAPAction","urn:monFichierService#monService");

	        httpPost.setEntity(new StringEntity(webServiceXml));

	        HttpResponse httpResponse = httpClient.execute(httpPost);

	        response = EntityUtils.toString(httpResponse.getEntity());
	}
	catch(Exception ex)
	{
	        Log.i("error", ex.getMessage());
	        System.out.println("ERROR" + ex.getMessage());
	}

	return response;
}

Je reçois bien une enveloppe xml en retour en faisant :

System.out.println(callWebServiceMethod("monLogin"))

Mais je ne sais pas comment la parser... (j'ai fait des recherche sur SAXParser qui paraît bien... mais je ne sais pas trop comment utiliser ce string xml pour parser..)

Est-ce que la méthode que j'utilise est la bonne ? Ou faut-il que je m'y prenne autrement ?

EDIT :

J'ai fait un :

try {
			SAXParserFactory spf = SAXParserFactory.newInstance();
			SAXParser sp = spf.newSAXParser();
			XMLReader xr = sp.getXMLReader();
			xr.setContentHandler(this);
			xr.parse(callWebServiceMethod("test"));
		} catch (Exception e) {
			System.out.println("XML Pasing Exception = " + e);
		}

L'enveloppe xml s'affiche bien dans mon println, mais il me met :

XML Pasing Exception = java.io.IOException: Couldn't open ... (blabla mon enveloppe xml)

Quelqu'un sait d'où cela peux venir ? merci :)

EDIT : sur un forum stackOverflow ils disent que SAXParser parse uniquement une URI ou url et pas une enveloppe dans un string... comment puis-je faire du coup ? Merci..

EDIT 3 : Bon, apparemment ça marche en faisant :

InputSource source = new InputSource(new StringReader(callWebServiceMethod("test")));
xr.parse(source);

Merci quand même...

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...