Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获得WebMethod';s在Android KSOAP2客户端中返回字符串[][]_Android_Eclipse_Web Services - Fatal编程技术网

如何获得WebMethod';s在Android KSOAP2客户端中返回字符串[][]

如何获得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

我有一个返回字符串[][]的web方法,我试图在android中解析ksoap2中的返回。我似乎无法理解它是如何序列化的,但我所要做的就是以字符串[][]或ArrayList或Vector或任何数据结构获取返回。我都试过了,似乎什么都没用。这是我的密码

    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();
    }
}
}