Stringで単純なメソッドを実行するためにSOAPリクエストが必要なWebサービスがあります。今、私はこのWebサービスを使用するためにAndroidでアプリを作成し、データをシリアル化して、SOAP経由でWebサービスに送信したいと考えています。
ここにいくつかのコードがあります:
public class SendedLocation implements Serializable {
public String MESSAGE;
public SendedLocation() {
}
public SendedLocation(int mId, float mLongitude, float mLatitude) {
MESSAGE = String.valueOf(mId) + ";" + String.valueOf(mLongitude) + ";" + String.valueOf(mLatitude);
}
public Object getProperty(int arg0) {
switch (arg0) {
case 0:
return MESSAGE;
}
return null;
}
public int getPropertyCount() {
return 1;
}
public void getPropertyInfo(int index, Hashtable arg1, PropertyInfo info) {
switch (index) {
case 0:
info.type = PropertyInfo.STRING_CLASS;
info.name = "MESSAGE";
break;
default:
break;
}
}
public void setProperty(int index, Object value) {
switch (index) {
case 0:
MESSAGE = value.toString();
break;
default:
break;
}
}
}
public void callWebService(int ID, float Longitude, float Latitude) {
try {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(
URL);
SendedLocation mSended = new SendedLocation(ID, Longitude, Latitude);
PropertyInfo p1 = new PropertyInfo();
p1.setName("mSended");
p1.setValue(mSended);
p1.setType(mSended.getClass());
request.addProperty(p1);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
envelope.addMapping(NAMESPACE, "mSended", mSended.getClass());
MarshalString marshalString = new MarshalString();
marshalString.register(envelope);
// Make the soap call.
androidHttpTransport.call(SOAP_ACTION, envelope);
Object results = (Object) envelope.getResponse();
// to get the data String
// resultData=result.getProperty(0).toString();
String temp = results.toString();
System.out.println(temp);
} catch (Exception aE) {
System.out.println(aE.toString());
}
}
public class MarshalString implements Marshal
{
public Object readInstance(XmlPullParser parser, String namespace, String name,
PropertyInfo expected) throws IOException, XmlPullParserException {
return String.valueOf(parser.nextText());
}
public void register(SoapSerializationEnvelope cm) {
cm.addMapping(cm.xsd, "string", String.class, this);
}
public void writeInstance(XmlSerializer writer, Object obj) throws IOException {
writer.text(obj.toString());
}
}
そして、私は次のようにonCreate()でこのcallWebService()メソッドを呼び出しています:
callWebService(ID , (float)location.getLongitude() , (float)location.getLatitude());
次に、アプリを実行すると、gpsから修正が取得されますが、データの送信に関しては、Webサービスを実行すると次のようになります。
java.lang.RuntimeException: Cannot serialize...
誰かが私にそれを機能させるために何を追加すべきか説明できますか?マーシャルクラスを使う手がかりを試した後、私は本当にわかりません...