如何通过JSON数组作为参数传递给web服务的Android的应用Ksoap2 [英] How to Pass json array as Parameter To A Webservice Using Ksoap2 in android
本文介绍了如何通过JSON数组作为参数传递给web服务的Android的应用Ksoap2的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的code为如下:
公共无效testWebServiceForJson(){
TextView中的TextView =新的TextView(本);
的setContentView(TextView的);
SoapObject请求=新SoapObject(WSDL_TARGET_NAMESPACE,
OPERATION_NAME);
ArrayList的<字符串>名单=新的ArrayList<字符串>();
list.add(嗒嗒);
list.add(的Bleh);
JSONArray jsArray =新JSONArray(名单);
字符串mStringArray [] = {字符串1,字符串2};
JSONArray mJSONArray =新JSONArray(Arrays.asList(mStringArray));
request.addProperty(jsonArray,mJSONArray);
SoapSerializationEnvelope包=新SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = TRUE;
envelope.setOutputSoapObject(要求);
HttpTransportSE httpTransport =新HttpTransportSE(SOAP_ADDRESS);
尝试
{
httpTransport.call(SOAP_ACTION,包);
对象响应= envelope.getResponse();
// SoapObject结果=(SoapObject)envelope.bodyIn;
textView.setText(fafaf);
}
赶上(例外的例外)
{
exception.printStackTrace();
textView.setText(exception.toString());
}
}
抛出异常:的
03-02 17:33:18.441:WARN / System.err的(520):java.lang.RuntimeException的:无法序列:[字符串1,字符串2]
03-02 17:33:18.451:WARN / System.err的(520):在org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:661)
03-02 17:33:18.451:WARN / System.err的(520):在org.ksoap2.serialization.SoapSerializationEnvelope.writeProperty(SoapSerializationEnvelope.java:645)
03-02 17:33:18.451:WARN / System.err的(520):在org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:614)
03-02 17:33:18.461:WARN / System.err的(520):在org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:598)
03-02 17:33:18.461:WARN / System.err的(520):在org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:655)
03-02 17:33:18.461:WARN / System.err的(520):在org.ksoap2.serialization.SoapSerializationEnvelope.writeBody(SoapSerializationEnvelope.java:579)
03-02 17:33:18.461:WARN / System.err的(520):在org.ksoap2.SoapEnvelope.write(SoapEnvelope.java:192)
03-02 17:33:18.471:WARN / System.err的(520):在org.ksoap2.transport.Transport.createRequestData(Transport.java:74)
03-02 17:33:18.471:WARN / System.err的(520):在org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:58)
03-02 17:33:18.471:WARN / System.err的(520):在com.ey.web.AndroidClientService.testWebServiceForJson(AndroidClientService.java:69)
03-02 17:33:18.480:WARN / System.err的(520):在com.ey.web.AndroidClientService.onCreate(AndroidClientService.java:29)
03-02 17:33:18.480:WARN / System.err的(520):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-02 17:33:18.480:WARN / System.err的(520):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
03-02 17:33:18.480:WARN / System.err的(520):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
03-02 17:33:18.480:WARN / System.err的(520):在android.app.ActivityThread.access $ 2300(ActivityThread.java:125)
03-02 17:33:18.480:WARN / System.err的(520):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033)
03-02 17:33:18.490:WARN / System.err的(520):在android.os.Handler.dispatchMessage(Handler.java:99)
03-02 17:33:18.490:WARN / System.err的(520):在android.os.Looper.loop(Looper.java:123)
03-02 17:33:18.490:WARN / System.err的(520):在android.app.ActivityThread.main(ActivityThread.java:4627)
03-02 17:33:18.490:WARN / System.err的(520):在java.lang.reflect.Method.invokeNative(本机方法)
03-02 17:33:18.490:WARN / System.err的(520):在java.lang.reflect.Method.invoke(Method.java:521)
03-02 17:33:18.490:WARN / System.err的(520):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)
03-02 17:33:18.502:WARN / System.err的(520):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-02 17:33:18.502:WARN / System.err的(520):在dalvik.system.NativeStart.main(本机方法)
解决方案
您不必使用ksoap2发送JSON服务器。 KSOAP使用的comunicate用肥皂web服务。
-
JSON的web服务应用,以及,JSON http://en.wikipedia.org/wiki/Json
要JSON发送到服务器:
阅读器 - [R;
字符串URL =http://10.111.111.43:9000/XentivoCrm/services/VisitJSON;
DefaultHttpClient的HttpClient =新DefaultHttpClient();
HttpPost httpost =新HttpPost(URL);
InputStream的数据= NULL;
尝试 {
ObjectMapper映射器=新ObjectMapper();
。mapper.getSerializationConfig()setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
JSON字符串= mapper.writeValueAsString(mStringArray);
//我用杰克逊创建的json,但内置的json.org将工作
StringEntity SE =新StringEntity(JSON);
httpost.setEntity(SE);
httpost.setHeader(JSON,应用/ JSON);
httpost.setHeader(HTTP.CONTENT_TYPE,应用/ JSON);
HTT presponse响应= httpClient.execute(httpost);
}
My code is given below:
public void testWebServiceForJson() {
TextView textView = new TextView(this);
setContentView(textView);
SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,
OPERATION_NAME);
ArrayList<String> list = new ArrayList<String>();
list.add("blah");
list.add("bleh");
JSONArray jsArray = new JSONArray(list);
String mStringArray[] = { "String1", "String2" };
JSONArray mJSONArray = new JSONArray(Arrays.asList(mStringArray));
request.addProperty("jsonArray", mJSONArray);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
try
{
httpTransport.call(SOAP_ACTION, envelope);
Object response = envelope.getResponse();
// SoapObject result = (SoapObject) envelope.bodyIn;
textView.setText("fafaf");
}
catch (Exception exception)
{
exception.printStackTrace();
textView.setText(exception.toString());
}
}
An exception is thrown :
03-02 17:33:18.441: WARN/System.err(520): java.lang.RuntimeException: Cannot serialize: ["String1","String2"]
03-02 17:33:18.451: WARN/System.err(520): at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:661)
03-02 17:33:18.451: WARN/System.err(520): at org.ksoap2.serialization.SoapSerializationEnvelope.writeProperty(SoapSerializationEnvelope.java:645)
03-02 17:33:18.451: WARN/System.err(520): at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:614)
03-02 17:33:18.461: WARN/System.err(520): at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:598)
03-02 17:33:18.461: WARN/System.err(520): at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:655)
03-02 17:33:18.461: WARN/System.err(520): at org.ksoap2.serialization.SoapSerializationEnvelope.writeBody(SoapSerializationEnvelope.java:579)
03-02 17:33:18.461: WARN/System.err(520): at org.ksoap2.SoapEnvelope.write(SoapEnvelope.java:192)
03-02 17:33:18.471: WARN/System.err(520): at org.ksoap2.transport.Transport.createRequestData(Transport.java:74)
03-02 17:33:18.471: WARN/System.err(520): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:58)
03-02 17:33:18.471: WARN/System.err(520): at com.ey.web.AndroidClientService.testWebServiceForJson(AndroidClientService.java:69)
03-02 17:33:18.480: WARN/System.err(520): at com.ey.web.AndroidClientService.onCreate(AndroidClientService.java:29)
03-02 17:33:18.480: WARN/System.err(520): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-02 17:33:18.480: WARN/System.err(520): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
03-02 17:33:18.480: WARN/System.err(520): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
03-02 17:33:18.480: WARN/System.err(520): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
03-02 17:33:18.480: WARN/System.err(520): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
03-02 17:33:18.490: WARN/System.err(520): at android.os.Handler.dispatchMessage(Handler.java:99)
03-02 17:33:18.490: WARN/System.err(520): at android.os.Looper.loop(Looper.java:123)
03-02 17:33:18.490: WARN/System.err(520): at android.app.ActivityThread.main(ActivityThread.java:4627)
03-02 17:33:18.490: WARN/System.err(520): at java.lang.reflect.Method.invokeNative(Native Method)
03-02 17:33:18.490: WARN/System.err(520): at java.lang.reflect.Method.invoke(Method.java:521)
03-02 17:33:18.490: WARN/System.err(520): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-02 17:33:18.502: WARN/System.err(520): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-02 17:33:18.502: WARN/System.err(520): at dalvik.system.NativeStart.main(Native Method)
解决方案
You don't have to use ksoap2 to send json to server. Ksoap is used to comunicate with soap webservice.
Soap use xml http://en.wikipedia.org/wiki/SOAP
Json web-service use, well, json http://en.wikipedia.org/wiki/Json
To send json to server:
Reader r;
String url = "http://10.111.111.43:9000/XentivoCrm/services/VisitJSON";
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(url);
InputStream data = null;
try {
ObjectMapper mapper = new ObjectMapper();
mapper.getSerializationConfig().setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
String json = mapper.writeValueAsString(mStringArray);
//I used jackson to create json, but built-in json.org will work
StringEntity se = new StringEntity(json);
httpost.setEntity(se);
httpost.setHeader("json", "application/json");
httpost.setHeader(HTTP.CONTENT_TYPE, "application/json");
HttpResponse response = httpClient.execute(httpost);
}
这篇关于如何通过JSON数组作为参数传递给web服务的Android的应用Ksoap2的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文