P.S:我已經看過類似的問題,但一直無法理解該怎麼做。他們談論使用一個元帥類,我似乎無法理解。
Web服務Android應用程序:無法序列化1.0
我創建一個Android應用到消耗JAX-WS。我正在使用相同的庫。
我從用戶輸入的一系列文本字段中傳遞這些信息到WebService活動中。
在這裏,在onCreate方法我稱之爲建立SOAP對象後,Web服務:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get the message from the intent
Intent intent = getIntent();
Bundle extras = intent.getExtras();
String cropName = extras.getString(AndroidWSClient.CROP_NAME);
float area = extras.getFloat(AndroidWSClient.AREA);
同樣地,我得到肥料的一些名稱,並將其添加到一個名爲fertilizerList一個ArrayList。我也以類似的方式獲得三個更多的值。
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
// Add parameters to the SOAP object
// cropName
PropertyInfo propInfo = new PropertyInfo();
propInfo.name = "cropName";
propInfo.type = PropertyInfo.STRING_CLASS;
request.addProperty(propInfo, cropName);
System.out.println("!!!! Success with cropName !!!");
// Area
propInfo = new PropertyInfo();
propInfo.setName("area");
propInfo.setType(Double.class);
request.addProperty(propInfo, area);
System.out.println("!!!! Success with area !!!");
// fertilizerList
propInfo = new PropertyInfo();
propInfo.setName("fertilizerList");
propInfo.setType(ArrayList.class);
request.addProperty(propInfo, fertilizerList);
System.out.println("!!!! Success with fertilizerList !!!");
// N value
propInfo = new PropertyInfo();
propInfo.setName("nitrogen");
propInfo.setType(Integer.class);
request.addProperty(propInfo, n);
System.out.println("!!!! Success with N !!!");
在這裏,我創建SOAP對象和屬性吧。
我需要將多個參數傳遞給我的Web服務,所以添加這些屬性的順序是它們作爲Web服務參數顯示的順序,對吧?
我然後發出請求到Web服務:
// Send out the request to the web service
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
System.out.println("created envelope!");
envelope.setOutputSoapObject(request);
System.out.println("Reached set output object");
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
System.out.println("Reached HttpTransport layer");
try {
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive resultsRequestSOAP = (SoapPrimitive) envelope.getResponse();
TextView textView = new TextView(this);
textView.setTextSize(40);
System.out.println(resultsRequestSOAP.toString());
textView.setText(resultsRequestSOAP.toString());
// Set the text view as the activity layout
setContentView(textView);
} catch (Exception e) {
e.printStackTrace();
}
下面是從logcat的輸出:
07-11 05:37:32.782: I/System.out(1698): !!!! Success with cropName !!!
07-11 05:37:32.782: I/System.out(1698): !!!! Success with area !!!
07-11 05:37:32.792: I/System.out(1698): !!!! Success with fertilizerList !!!
07-11 05:37:32.792: I/System.out(1698): !!!! Success with N !!!
07-11 05:37:32.872: I/System.out(1698): created envelope!
07-11 05:37:32.872: I/System.out(1698): Reached set output object
07-11 05:37:32.912: I/System.out(1698): Reached HttpTransport layer
07-11 05:37:33.012: W/System.err(1698): java.lang.RuntimeException: Cannot serialize: 1.0
07-11 05:37:33.012: W/System.err(1698): at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:629)
07-11 05:37:33.022: W/System.err(1698): at org.ksoap2.serialization.SoapSerializationEnvelope.writeProperty(SoapSerializationEnvelope.java:613)
07-11 05:37:33.032: W/System.err(1698): at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:582)
07-11 05:37:33.032: W/System.err(1698): at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:566)
07-11 05:37:33.062: W/System.err(1698): at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:623)
07-11 05:37:33.072: W/System.err(1698): at org.ksoap2.serialization.SoapSerializationEnvelope.writeBody(SoapSerializationEnvelope.java:547)
07-11 05:37:33.072: W/System.err(1698): at org.ksoap2.SoapEnvelope.write(SoapEnvelope.java:192)
07-11 05:37:33.092: W/System.err(1698): at org.ksoap2.transport.Transport.createRequestData(Transport.java:74)
07-11 05:37:33.092: W/System.err(1698): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:58)
07-11 05:37:33.112: W/System.err(1698): at com.example.androidwsclient.WebServiceActivity.onCreate(WebServiceActivity.java:99)
07-11 05:37:33.112: W/System.err(1698): at android.app.Activity.performCreate(Activity.java:5104)
07-11 05:37:33.132: W/System.err(1698): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
我沒有在任何地方看到propInfo.setValue()...你需要傳遞一些值嗎? – Papasmile
@Papasmile我使用seccond參數在addProperty調用中設置了值。 – user1925405
第二個參數是屬性名稱Eg區域。你的價值在哪裏例如100.0? – Papasmile