如何获得WebMethod';s在Android KSOAP2客户端中返回字符串[][]
我有一个返回字符串[][]的web方法,我试图在android中解析ksoap2中的返回。我似乎无法理解它是如何序列化的,但我所要做的就是以字符串[][]或ArrayList或Vector或任何数据结构获取返回。我都试过了,似乎什么都没用。这是我的密码如何获得WebMethod';s在Android KSOAP2客户端中返回字符串[][],android,eclipse,web-services,Android,Eclipse,Web Services,我有一个返回字符串[][]的web方法,我试图在android中解析ksoap2中的返回。我似乎无法理解它是如何序列化的,但我所要做的就是以字符串[][]或ArrayList或Vector或任何数据结构获取返回。我都试过了,似乎什么都没用。这是我的密码 try { // connect to web service and call getUploadedMonthsYears web method request = new Soap
try
{
// connect to web service and call getUploadedMonthsYears web method
request = new SoapObject(NAMESPACE, "getUploadedMonthsYears");
envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
androidHttpTransport = new AndroidHttpTransport(URL);
androidHttpTransport.call("http://alfaisaliah.com/getUploadedMonthsYears", envelope);
// create a serializable object that will hold the array of strings
ks = (KvmSerializable)envelope.bodyIn;
monthsYears = new String[10][10];
for(int i = 0; i < ks.getPropertyCount(); i++)
{
monthsYears[i][i] = ks.getProperty(i).toString();
}
} catch (Exception ex)
{
System.out.println(ex.getMessage());
return;
}
等等。thanx我有一个类似的web服务(Axis2),它返回字符串矩阵:
getCadenaResponse{return=anyType{array=hola; array=adios; }; return=anyType{array=hello; array=bye; }; return=anyType{array=bonjour; array=au revoir; }; }
这是一个3x2的字符串矩阵。这不是一个有效的JSON响应,所以我使用了一些技巧来分割响应
试试这个:
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.util.Log;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONObject;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
public class MainActivity extends Activity {
private String NAMESPACE = /* YOUR NAMESPACE */
private String METHOD_NAME = /* YOUR METHOD NAME */
private String URL = /* YOUR URL */
private TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView)findViewById(R.id.tv);
HttpTransportSE transport = new HttpTransportSE(URL);
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope =
new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
ArrayList<ArrayList<String>> matrix = new ArrayList<ArrayList<String>>();
try {
transport.call(NAMESPACE + METHOD_NAME, envelope);
SoapObject response = (SoapObject)envelope.bodyIn;
int cols = response.getPropertyCount();
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < cols; i++) {
Object objectResponse = (Object) response.getProperty(i);
String result = objectResponse.toString();
String[] array = result.split(";");
for (int j = 0; j < array.length-1; j++) {
String ss = array[j].substring(array[j].indexOf('='), array[j].length());
list.add(ss);
Log.v("TEST", ss);
}
matrix.add(list);
}
/* Here you have the matrix of strings in 'matrix' */
} catch (Exception e) {
e.printStackTrace();
}
}
}
导入android.app.Activity;
导入android.os.Bundle;
导入android.widget.TextView;
导入android.util.Log;
导入java.util.ArrayList;
导入org.json.JSONArray;
导入org.json.JSONObject;
导入org.ksoap2.SoapEnvelope;
导入org.ksoap2.serialization.SoapObject;
导入org.ksoap2.serialization.SoapSerializationEnvelope;
导入org.ksoap2.transport.HttpTransportSE;
公共类MainActivity扩展了活动{
私有字符串名称空间=/*您的名称空间*/
私有字符串方法\u NAME=/*您的方法名称*/
私有字符串URL=/*您的URL*/
私家图文电视;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=(TextView)findviewbyd(R.id.tv);
HttpTransportSE传输=新的HttpTransportSE(URL);
SoapObject请求=新的SoapObject(名称空间、方法名称);
SOAPSerialization信封=
新的SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(请求);
ArrayList矩阵=新的ArrayList();
试一试{
调用(名称空间+方法名称,信封);
SoapObject响应=(SoapObject)envelope.bodyIn;
int cols=response.getPropertyCount();
ArrayList=新建ArrayList();
for(int i=0;i
这对我来说是可行的,但我认为这只适用于包含字符串的基本类型。
希望能有帮助
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.util.Log;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONObject;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
public class MainActivity extends Activity {
private String NAMESPACE = /* YOUR NAMESPACE */
private String METHOD_NAME = /* YOUR METHOD NAME */
private String URL = /* YOUR URL */
private TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView)findViewById(R.id.tv);
HttpTransportSE transport = new HttpTransportSE(URL);
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
SoapSerializationEnvelope envelope =
new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
ArrayList<ArrayList<String>> matrix = new ArrayList<ArrayList<String>>();
try {
transport.call(NAMESPACE + METHOD_NAME, envelope);
SoapObject response = (SoapObject)envelope.bodyIn;
int cols = response.getPropertyCount();
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < cols; i++) {
Object objectResponse = (Object) response.getProperty(i);
String result = objectResponse.toString();
String[] array = result.split(";");
for (int j = 0; j < array.length-1; j++) {
String ss = array[j].substring(array[j].indexOf('='), array[j].length());
list.add(ss);
Log.v("TEST", ss);
}
matrix.add(list);
}
/* Here you have the matrix of strings in 'matrix' */
} catch (Exception e) {
e.printStackTrace();
}
}
}