2012-03-27 4 views
0

私はString [] []を返すWebメソッドを持っていて、アンドロイドでksoap2の戻り値を解析しようとしています。私はそれがどのようにシリアライズされているのか理解できないようですが、私がしようとしているのは、String [] []またはArrayListまたはVectorまたは任意のデータ構造体でリターンを得ることだけです。私はそれらをすべて試して何も動作するようです。ここに私のコードです。Android KSOAP2クライアントでWebMethodのString [] []を返す方法

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

getUploadedMonthsYears()Webメソッドは、[] []

月、年に

1, 2011 
2, 2011 
3, 2011 
1, 2012 

などを次のように文字列を返します。

getCadenaResponse{return=anyType{array=hola; array=adios; }; return=anyType{array=hello; array=bye; }; return=anyType{array=bonjour; array=au revoir; }; } 

それは、文字列の3×2行列です:ありがとう

答えて

1

は、私は、文字列の行列を返す同様のWebサービス(Axis2の)を持っています。これは有効な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(); 
    } 
} 
} 

これは私のために動作しますが、私はプリミティブ型がStringを含んでのみ動作することを考えます。 お手伝いをしてください。

関連する問題