Я пытаюсь подключиться к службе .NET WCF в Android с помощью kSOAP2 (v 2.1.2), но я получаю фатальное исключение всякий раз, когда пытаюсь выполнить вызов службы. У меня возникли трудности с поиском ошибки, и я не могу понять, почему это происходит. Код, который я использую ниже:
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();
}
}
РЕДАКТИРОВАТЬ: удалить старые следы стека. Таким образом, первая проблема заключалась в том, что программе не удалось открыть соединение из-за отсутствия методов или библиотек из-за использования vanilla kSOAP2, а не модифицированной библиотеки для Android (kSOAP2-Android). Второй проблемой была проблема с настройками. В Манифесте я не добавил следующую настройку:
<uses-permission android:name="android.permission.INTERNET" />
У меня сейчас проблема с XMLPullParser, которую мне нужно выяснить.
12-23 10: 58: 06.480:
ОШИБКА / SOCKETLOG (210): add_recv_stats
recv 0
12-23 10: 58: 06.710:
WARN / System.err (210):
org.xmlpull.v1.XmlPullParserException:
неожиданный тип (позиция: END_DOCUMENT
ноль @ 1: 0 в
java.io.InputStreamReader@433fb070)
12-23 10: 58: 06.710:
WARN / System.err (210): в
org.kxml2.io.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): в
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): в
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
Метод)
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.internal.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
Метод)