KSoap2 Android接收对象数组

KSoap2 Android接收对象数组,android,arrays,web-services,android-ksoap2,Android,Arrays,Web Services,Android Ksoap2,我试图在我的应用程序中使用.NETWebService,该服务返回一个对象数组作为响应 这是来自web服务的响应的格式 <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.x

我试图在我的应用程序中使用.NETWebService,该服务返回一个对象数组作为响应

这是来自web服务的响应的格式

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetPickersResponse xmlns="http://tempuri.org/">
  <GetPickersResult>
    <Picker>
      <Id>int</Id>
      <StartTime>dateTime</StartTime>
      <EndTime>dateTime</EndTime>
      <PickerCount>int</PickerCount>
    </Picker>
    <Picker>
      <Id>int</Id>
      <StartTime>dateTime</StartTime>
      <EndTime>dateTime</EndTime>
      <PickerCount>int</PickerCount>
    </Picker>
  </GetPickersResult>
</GetPickersResponse>
</soap:Body>
</soap:Envelope>
SoapObject request = new SoapObject(NAMESPACE, METHOD_GET_CONTROL);
SoapSerializationEnvelope envelope = 
        new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);


HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

 try {
             androidHttpTransport.call(SOAP_ACTION_GET_CONTROL, envelope);
            ..........=envelope.getResponse(); //To get the data. }
我的问题是,如何替换源代码中的“…”,以接收作为服务响应的对象数组? 我需要接收多个对象,然后使用它们各自的数据成员


请帮忙。我不熟悉Web服务和Ksoap。

要获得多个响应,只需在代码中添加几行代码,而不是
..=envelope.getResponse();

soapobjectobj1=(SoapObject)envelope.getResponse();
SoapObject obj2=(SoapObject)obj1.getProperty(0);

对于(int i=0;i我总是将向量作为响应类型,因此我的解决方案是:

        HttpTransportSE conn = new HttpTransportSE(url);
        try{
            conn.call(soapAction, envelope); //send request
            Vector<SoapObject> result= (Vector<SoapObject>)envelope.getResponse();

            int length = result.size();
            for(int i=0;i<length; ++i){
                SoapObject so = result.get(i);
                Log.d(TAG,so.getPropertyAsString(3));
            }
        } catch(Exception e){
            e.printStackTrace();
        }
HttpTransportSE conn=新的HttpTransportSE(url);
试一试{
conn.call(soapAction,信封);//发送请求
Vector结果=(Vector)envelope.getResponse();
int length=result.size();
对于(int i=0;i
package com.service;
导入java.util.ArrayList;
导入org.ksoap2.SoapEnvelope;
导入org.ksoap2.serialization.PropertyInfo;
导入org.ksoap2.serialization.SoapObject;
导入org.ksoap2.serialization.SoapPrimitive;
导入org.ksoap2.serialization.SoapSerializationEnvelope;
导入org.ksoap2.transport.AndroidHttpTransport;
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.Toast;
公共类KSOAP扩展活动
{
列表视图列表;
ArrayList ArrayList=新的ArrayList();
ArrayAdapter ArrayAdapter;
按钮btn;
TextView电视、tv2、tv3;
编辑文本1号、2号;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState)
{ 
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=(TextView)findViewById(R.id.textView1);
tv2=(TextView)findViewById(R.id.textView2);
//tv3=(TextView)findViewById(R.id.textView3);
列表=(ListView)findViewById(R.id.listView1);
no1=(EditText)findViewById(R.id.editText1);
no2=(EditText)findViewById(R.id.editText2);
btn=(按钮)findViewById(R.id.button1);
btn.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
字符串命名空间=”http://tempuri.org/" ;    
//"http://vladozver.org/";
字符串方法\u NAME=“GetSumOfTwoIntsList”/“GetStringList”//
字符串SOAP_ACTION=”http://tempuri.org/GetSumOfTwoIntsList";  
//"http://vladozver.org/GetSumOfTwoInts";
字符串URL=”http://192.168.0.203/recharge_service/service.asmx";
//"http://192.168.0.203/Recharge_Service/Service.asmx";
SoapObject请求=新的SoapObject(名称空间、方法名称);
PropertyInfo pi=新的PropertyInfo();
pi.setName(“操作数1”);
setValue(Integer.parseInt(no1.getText().toString());
pi.setType(int.class);
请求。添加属性(pi);
PropertyInfo pi2=新的PropertyInfo();
pi2.集合名(“操作数2”);
setValue(Integer.parseInt(no2.getText().toString());
pi2.集合类型(int.class);
请求。添加属性(pi2);
SoapSerializationEnvelope=新的SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(请求);
尝试
{
AndroidHttpTransport=新的AndroidHttpTransport(URL);
传输呼叫(SOAP_动作、信封);
SoapObject obj1=(SoapObject)envelope.bodyIn;
SoapObject obj2=(SoapObject)obj1.getProperty(0);
对于(int i=0;i
这是一种方法

String NAMESPACE=“您的名称空间”

public void involk(字符串na,字符串WebMethodName)引发IllegalStateException{

    SoapObject request=new SoapObject(NAMESPACE,WebMethodName);

    PropertyInfo sayHellopi=new PropertyInfo();

    sayHellopi.setName("get");
    sayHellopi.setValue(na);
    sayHellopi.setType(String.class);

    request.addProperty(sayHellopi);

    SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.setOutputSoapObject(request);

    AndroidHttpTransport transp = new AndroidHttpTransport(URL);

    try {
        transp.call(SOAP_ACTION,envelope);
        //ArrayList primitive= (ArrayList) envelope.bodyIn;
        SoapObject primitive= (SoapObject) envelope.bodyIn;
        // SoapObject obj2=(SoapObject)obj1.getProperty(0);
        // KvmSerializable ks=(KvmSerializable)envelope.bodyIn;
        // System.out.println("Values.............."+envelope.bodyIn);
               /* for(int i=0;i<obj2.getPropertyCount();i++){
                  String  id1=obj2.getProperty(0).toString();

                    if(""!=id1 ){

                        System.out.println("Count " + obj2.getPropertyCount());
                        arraylist.add(""+id1);
                        System.out.println("Array ::::::::::::: " + arraylist);

                    }
                }*/
                  //resText= envelope.bodyIn;

                   //resText = new ArrayList<Objects>();
           //for(int i=0;i<resText.equals(resText);i++){

          //}
                 System.out.println("List+++++++++++++++++");
               /* //System.out.println("value of result " + primitive);
                System.out.println("Count " + primitive.getPropertyCount());
                //System.out.println("Prop 1 " + primitive.getProperty(0));
                //System.out.println("A list b4 :; " + arrayList);*/

    /* for(int i=0;i<obj1.getPropertyCount();i++){
             //discount=new Discount((SoapObject)primitive.getProperty(i));
            //Toast.makeText(getApplicationContext(),"Hi",Toast.LENGTH_SHORT).show();

            //System.out.println("is result null????????????"+result);
            arraylist.add(obj1.getPropertyCount());
            System.out.println("Array ::::::::: " + arraylist);
        }*/
       // arraylist=new ArrayList();
        //resText=new String[primitive.getPropertyCount()];

        for(int i=0;i<primitive.getPropertyCount();i++){

            arraylist.add((String) primitive.getProperty(i));
            //arraylist.add(primitive.getPropertyCount());
            System.out.println("ForLoop--------------"+primitive.getProperty(i));


            // System.out.println("is result null????????????"+arrayList.listIterator());

        }
        // ListIterator it = arraylist.listIterator();

        //while(it.hasNext())
        // {
        // System.out.println("arrayListValue--------------"+it.next());
        //}
        // System.out.println("List+++++++++++++++++"+resText.length);

        // list.setAdapter(arrayadapter);

    }catch (Exception e){
        System.out.println("Error Value" + e);
        //resText="Error Occur";
        e.printStackTrace();
    }
    //list.setAdapter(arrayadapter);
  //return "";
}

我希望这是能帮助你的朋友:)

你是否解决了你的问题?@SachinD:我解决了!使用了你的代码的修改版本,它工作了。非常感谢。你能告诉我你是如何在你的Web服务中添加了多个属性的吗..即..你的
Id
开始时间
结束时间
PickerCount
。我只是想知道如何实现..@Lal:你说的是服务器端吗?是的..服务器端..@SwayamI实际上已经使用Sachin D的解决方案的修改版本解决了这个问题,但是,谢谢你的帮助。还有+1使用了
Vector
。谢谢!:)听说我正在传递两个参数并获取编号列表。这段代码也可以用于访问和显示字符串。它不应该是:SoapObject obj3=(SoapObject)obj2.getProperty(i);否则,对于每个循环,您从第二个对象拾取位置0,而不是在其内容中循环
package com.service;

import java.util.ArrayList;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class KSOAP extends Activity 
{
    ListView list;
    ArrayList<String> arraylist = new ArrayList<String>();
    ArrayAdapter<String>  arrayadapter;

    Button btn;
    TextView tv,tv2,tv3; 
    EditText no1,no2;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) 
{ 
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

tv=(TextView)findViewById(R.id.textView1);
tv2=(TextView)findViewById(R.id.textView2);
//tv3=(TextView)findViewById(R.id.textView3);

list=(ListView)findViewById(R.id.listView1);

no1=(EditText)findViewById(R.id.editText1);
no2=(EditText)findViewById(R.id.editText2);

btn =(Button)findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub


        String NAMESPACE = "http://tempuri.org/" ;    
        //"http://vladozver.org/";
        String METHOD_NAME = "GetSumOfTwoIntsList";//"GetStringList"; //
        String SOAP_ACTION = "http://tempuri.org/GetSumOfTwoIntsList";  
        //"http://vladozver.org/GetSumOfTwoInts";
        String URL = "http://192.168.0.203/recharge_service/service.asmx";
        //"http://192.168.0.203/Recharge_Service/Service.asmx";


        SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);

        PropertyInfo pi = new PropertyInfo();
        pi.setName("Operand1");
        pi.setValue(Integer.parseInt(no1.getText().toString()));
        pi.setType(int.class);
        Request.addProperty(pi);

        PropertyInfo pi2 = new PropertyInfo();
        pi2.setName("Operand2");
        pi2.setValue(Integer.parseInt(no2.getText().toString()));
        pi2.setType(int.class);
        Request.addProperty(pi2);


        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(Request);
        try
        {
        AndroidHttpTransport transp = new AndroidHttpTransport(URL);
        transp.call(SOAP_ACTION, envelope);

        SoapObject obj1 = (SoapObject) envelope.bodyIn;

        SoapObject obj2 =(SoapObject) obj1.getProperty(0);


        for (int i = 0; i< obj2.getPropertyCount(); i++) 
            { 
                 int id1 = Integer.parseInt(obj2.getProperty(0).toString());
              // String id1=obj2.getProperty(0).toString();

               if(id1 != 0)
               { 
                 arraylist.add(""+ id1);    

               }
                /* tv3.setText(id3);*/
            }


        }
        catch(Exception e)
        { tv.setText(e.toString());
        e.printStackTrace();
        }

        //tv.setText(""+ count);



               list.setAdapter(arrayadapter);
    }
});

        arrayadapter = new ArrayAdapter<String>( this, 
        android.R.layout.simple_list_item_1, arraylist );
       list.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub

        }
    });

}


}
//"http://vladozver.org/";

String METHOD_NAME = "get";//"GetStringList"; //

String SOAP_ACTION = "Your SoapAction";

//"http://vladozver.org/GetSumOfTwoInts";

String URL = "Your Soap Url";
    SoapObject request=new SoapObject(NAMESPACE,WebMethodName);

    PropertyInfo sayHellopi=new PropertyInfo();

    sayHellopi.setName("get");
    sayHellopi.setValue(na);
    sayHellopi.setType(String.class);

    request.addProperty(sayHellopi);

    SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.setOutputSoapObject(request);

    AndroidHttpTransport transp = new AndroidHttpTransport(URL);

    try {
        transp.call(SOAP_ACTION,envelope);
        //ArrayList primitive= (ArrayList) envelope.bodyIn;
        SoapObject primitive= (SoapObject) envelope.bodyIn;
        // SoapObject obj2=(SoapObject)obj1.getProperty(0);
        // KvmSerializable ks=(KvmSerializable)envelope.bodyIn;
        // System.out.println("Values.............."+envelope.bodyIn);
               /* for(int i=0;i<obj2.getPropertyCount();i++){
                  String  id1=obj2.getProperty(0).toString();

                    if(""!=id1 ){

                        System.out.println("Count " + obj2.getPropertyCount());
                        arraylist.add(""+id1);
                        System.out.println("Array ::::::::::::: " + arraylist);

                    }
                }*/
                  //resText= envelope.bodyIn;

                   //resText = new ArrayList<Objects>();
           //for(int i=0;i<resText.equals(resText);i++){

          //}
                 System.out.println("List+++++++++++++++++");
               /* //System.out.println("value of result " + primitive);
                System.out.println("Count " + primitive.getPropertyCount());
                //System.out.println("Prop 1 " + primitive.getProperty(0));
                //System.out.println("A list b4 :; " + arrayList);*/

    /* for(int i=0;i<obj1.getPropertyCount();i++){
             //discount=new Discount((SoapObject)primitive.getProperty(i));
            //Toast.makeText(getApplicationContext(),"Hi",Toast.LENGTH_SHORT).show();

            //System.out.println("is result null????????????"+result);
            arraylist.add(obj1.getPropertyCount());
            System.out.println("Array ::::::::: " + arraylist);
        }*/
       // arraylist=new ArrayList();
        //resText=new String[primitive.getPropertyCount()];

        for(int i=0;i<primitive.getPropertyCount();i++){

            arraylist.add((String) primitive.getProperty(i));
            //arraylist.add(primitive.getPropertyCount());
            System.out.println("ForLoop--------------"+primitive.getProperty(i));


            // System.out.println("is result null????????????"+arrayList.listIterator());

        }
        // ListIterator it = arraylist.listIterator();

        //while(it.hasNext())
        // {
        // System.out.println("arrayListValue--------------"+it.next());
        //}
        // System.out.println("List+++++++++++++++++"+resText.length);

        // list.setAdapter(arrayadapter);

    }catch (Exception e){
        System.out.println("Error Value" + e);
        //resText="Error Occur";
        e.printStackTrace();
    }
    //list.setAdapter(arrayadapter);
  //return "";
}
    protected void onPreExecute(){

        super.onPreExecute();

        // pg.setVisibility(View.VISIBLE);
        dialog=new ProgressDialog(MainActivity.this);
        dialog.setIndeterminate(false);
        dialog.setMessage("Loding...");
        dialog.setCancelable(false);
        dialog.show();
    }
    protected Void doInBackground(Void... parms){
      involk(editText,"get");
       // return null;
       // return null;
        return null;
    }

    protected void onPostExecute(Void result){
        super.onPreExecute();
        // tv.setText(displayText);
        if(arraylist.size()!=0){
            dialog.dismiss();
        arrayadapter = new ArrayAdapter<String>( MainActivity.this,
                android.R.layout.simple_list_item_activated_1, arraylist );
            list.setAdapter(arrayadapter);
        }else{
            dialog.dismiss();
            getError();
        }
        // pg.setVisibility(View.INVISIBLE);
    }
}
        public void onClick(View view) {

            if(no1.getText().length()!=0&&no1.getText().length()!=0){

                editText=no1.getText().toString();
                AsyncCall task=new AsyncCall();
                task.execute();
            }
        }
    });