Estoy tratando de usar una .NET webservice en mi aplicación donde el servicio devuelve un array de objetos como una respuesta.

Este es el formato de la respuesta del servicio 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>

Este es mi código de Java para obtener la respuesta del servicio web.

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

Mi pregunta, ¿con qué puedo reemplazar el «……..» en mi código fuente para recibir el array de objetos como una respuesta desde el servicio ?
Necesito recibir varios objetos y, a continuación, utilizar sus datos individuales de los miembros.

Ayuda por favor. Soy nuevo en la Web, de los servicios y de Ksoap.

  • has solucionado el problema o no?
  • Yo lo hice! Utiliza una versión modificada de su código y funcionó. Gracias una tonelada.
  • puede usted por favor me muestran cómo agregar más de una propiedad en su webservice..es decir..su Id,StartTime,EndTime,PickerCount..yo sólo quería saber cómo se puede conseguir esto..
  • estás hablando del lado del servidor ?
  • sí..el servidor [email protected]
  • Ya que este post es bastante viejo, no estoy seguro de si puedo conseguir el código. Pero sí, el concepto es bastante simple. Crear una Clase personalizada, que contiene las propiedades que desee. Y en el resultado, devolverá una Lista de Objetos.
  • Ya tengo pero me estoy poniendo ciertos errores al intentar que..me estaba preguntando por usted para que pueda comprobar dónde estaba cometiendo error..en realidad yo soy muy nuevo en la escritura de webservices en java..podría usted por favor, me sugieren algunos enlaces para referirse si conoces alguna..por favor
  • srikanthtechnologies.com/blog/dotnet/wsdaljava.aspx

InformationsquelleAutor Swayam | 2012-06-14

4 Comentarios

  1. 6

    para obtener respuesta Múltiple sólo añadir unas líneas en el código en lugar de la ..........=envelope.getResponse();

    SoapObject obj1 = (SoapObject) envelope.getResponse();
    
    SoapObject obj2 =(SoapObject) obj1.getProperty(0);
    
    
    for(int i=0; i<obj2.getPropertyCount(); i++)
    {
       SoapObject obj3 =(SoapObject) obj2.getProperty(i);
       int id= Integer.parseInt(obj3.getProperty(0).toString());
       String start_date = obj3.getProperty(1).toString();
       String end_date = obj3.getProperty(2).toString();
       int id= Integer.parseInt(obj3.getProperty(3).toString());
    }

    Si usted todavía tiene cualquier Problema, usted puede escribir a mí.

    • no debería ser: SoapObject obj3 =(SoapObject) obj2.getProperty(i); de lo contrario, para cada uno de los bucles de elegir la posición 0 del segundo objeto en lugar de bucle aunque su contenido
    • thx sjoerdvgestel he corregido la ans
  2. 3

    Yo siempre obtener el Vector como el tipo de respuesta, así que mi solución es:

            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();
            }
    • Yo en realidad ya resuelto usando una versión modificada de Sachin D solución, pero que, sin embargo, gracias por su ayuda. Y +1 para el uso de Vector. Gracias! 🙂
  3. 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
    }
    });
    }
    }
    • oye yo estoy pasando dos parámetros y obtener la lista de los que no. así que este código se puede utilizar para el acceso y la visualización de la Cadena.
  4. 0

    este es el método

    Espacio de NOMBRES de cadena = «El espacio de Nombres» ;

    //"http://vladozver.org/";
    String METHOD_NAME = "get";//"GetStringList"; //
    String SOAP_ACTION = "Your SoapAction";
    //"http://vladozver.org/GetSumOfTwoInts";
    String URL = "Your Soap Url";

    public void involk(Cadena de na,Cadena de WebMethodName)lanza 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 "";
    }

    el uso de asynctask

    clase privada AsyncCall extends AsyncTask {

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

    Evento de Clic de botón

    btn.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
    if(no1.getText().length()!=0&&no1.getText().length()!=0){
    editText=no1.getText().toString();
    AsyncCall task=new AsyncCall();
    task.execute();
    }
    }
    });

    Espero que Esto le ayudará amigo 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here