J'essaie de me connecter à un service .NET WCF sous Android à l'aide de kSOAP2 (v 2.1.2), mais je reçois toujours une exception fatale chaque fois que j'essaie d'effectuer l'appel de service. J'ai un peu de difficulté à localiser l'erreur et n'arrive pas à comprendre pourquoi cela se produit. Le code que j'utilise est le suivant:Impossible de se connecter au service WCF sur Android
package org.example.android;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransport;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
public class ValidateUser extends Activity {
private static final String SOAP_ACTION = "http://tempuri.org/mobile/ValidateUser";
private static final String METHOD_NAME = "ValidateUser";
private static final String NAMESPACE = "http://tempuri.org/mobile/";
private static final String URL = "http://192.168.1.2:8002/WebService.Mobile.svc";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.validate_user);
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras == null) {
this.finish();
}
String username = extras.getString("username");
String password = extras.getString("password");
Boolean validUser = false;
try {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo uName = new PropertyInfo();
uName.name = "userName";
PropertyInfo pWord = new PropertyInfo();
pWord.name = "passWord";
request.addProperty(uName, username);
request.addProperty(pWord, password);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransport androidHttpTransport = new HttpTransport(URL);
androidHttpTransport.call(SOAP_ACTION, envelope); // error occurs here
Integer userId = (Integer)envelope.getResponse();
validUser = (userId != 0);
} catch (Exception ex) {
}
}
private void exit() {
this.finish();
}
}
EDIT: supprime les anciennes traces de pile. En résumé, le premier problème était le programme étant incapable d'ouvrir une connexion en raison de l'absence de méthodes ou de bibliothèques en raison de l'utilisation de kSOAP2 vanille plutôt que d'une bibliothèque modifiée pour Android (kSOAP2-Android). Le deuxième problème était un problème de paramètres. Dans le manifeste, je ne l'ai pas ajouter le paramètre suivant:
<uses-permission android:name="android.permission.INTERNET" />
J'ai maintenant un problème avec le XMLPullParser que je dois comprendre.
12-23 10: 58: 06,480: ERREUR/SOCKETLOG (210): add_recv_stats recv 0
12-23 10: 58: 06,710: WARN/System.err (210): org.xmlpull.v1.XmlPullParserException: Type inattendu (position: END_DOCUMENT null @ 1: 0 à [email protected])
12-23 10: 58: 06,710: WARN/System. err (210): à org.kxml2.i o.KXmlParser.exception (KXmlParser.java:243)
12-23 10: 58: 06,720: WARN/System.err (210): à org.kxml2.io.KXmlParser.nextTag (KXmlParser.java : 1363)
12-23 10: 58: 06,720: WARN/System.err (210): à org.ksoap2.SoapEnvelope.parse (SoapEnvelope.java:126)
12-23 10 : 58: 06.720: WARN/System.err (210): au org.ksoap2.transport.Transport.parseResponse (Transport.java:63)
12-23 10: 58: 06,720: WARN/System.err (210): à org.ksoap2.transport.HttpTransportSE.call (HttpTransportSE.java:100)
12-23 10:58: 06,730: WARN/System.err (210): à org.example.android.ValidateUser.onCreate (ValidateUser.java:68)
12-23 10: 58: 06,730: WARN/System.err (210): à android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1122)
12-23 10: 58: 06,730: WARN/System .err (210): à android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2104)
12-23 10: 58: 06,730: WARN/System.err (210): à android.app .ActivityThread.handleLaunchActivity (ActivityThread.java:2157)
12-23 10: 58: 06,730: WARN/System.err (210): à android.app.ActivityThread.access 1800 $ (ActivityThread.java: 112)
12-23 10: 58: 06,730: WARN/System.err (210): à android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1581)
12 -23 10: 58: 06,730: WARN/System.err (210): à android.os.Handler.dispatchMessage (Handler.java:88)
12-23 10: 58: 06,730: WARN/System.err (210): au android.os.Looper.loop (Looper.java:123)
12-23 10:58 : 06,730: WARN/System.err (210): à android.app.ActivityThread.main (ActivityThread.java:3739)
12-23 10: 58: 06,730: WARN/System.err (210): à java.lang.reflect.Method.invokeNative (native Méthode)
12-23 10: 58: 06,730: WARN/System.err (210): à java.lang.reflect.Method .invoke (Method.java:515)
12-23 10: 58: 06.730: WARN/System.err (210): à com.android.i nternal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:739)
12-23 10: 58: 06,730: WARN/System.err (210): à com.android.internal.os.ZygoteInit .main (ZygoteInit.java:497)
12-23 10: 58: 06,730: WARN/System.err (210): à dalvik.system.NativeStart.main (native Method)
ne suis pas sûr du premier journal, mais dans la seconde log la « erreur inconnue » est d'une SOCKERR_ non gérée dans le code natif.Il devrait y avoir une entrée de logcat juste au-dessus du début de 'erreur de socket inconnue' quelle est cette ligne? –
J'ai édité les journaux pour montrer les 5 lignes au-dessus de l'exception. – illvm
J'étais capable de résoudre l'exception de socket inconnu. Il semble que j'ai négligé (et que j'ignorais) un paramètre que j'ai dû ajouter à mon fichier manifeste. Cela étant: . Maintenant, j'ai une XMLPullParserException que j'ai besoin de comprendre. –
illvm