problema de respuesta de android ksoap2

Tengo una aplicación de Android que llama a un servicio web varias veces a lo largo de la aplicación. Dado que llamar al método ksoap2 hace que la aplicación no responda, tuve que poner todo en la clase AsyncTask.

Todo lo que hice fue hacer que un ProgressDialog apareciera en onPreExecute (), y la llamada al servicio web en doInBackground, como se hizo en mi programa principal. Sin embargo, aunque la llamada al servicio web funciona, la respuesta del servicio web es "com.SmartInfinity.InfinityMain$webServiceCall@40697618". FYI com.SmartInfinity es mi paquete de aplicaciones, InfinityMain es mi actividad principal y webServiceCall es el método que llama al servicio web.

¿Alguien tiene alguna idea de por qué está sucediendo esto? Se supone que el servicio web devuelve resultados como "[field_x1 = value_x1; field_y1 = value + y1; field_x2 = value_x2; field_y2 = value_y2;]" Cuando llamo a la misma función con los mismos argumentos fuera de AsyncTask, funciona perfectamente.

Gracias por tu ayuda.

Editar: aquí está mi código:

private class webServiceCall extends AsyncTask<String, Void, Object> 
{
    @Override
    protected void onPreExecute()
    {
        dialog.show();
    }

    protected Object onPostExecute(Object... params) 
    {
        dialog.dismiss();
        return params;
    }

    @Override
    protected Object doInBackground(String... params) 
    {
        Object result = null;
        String[] temp = new String[params.length - 2];
        String method_name = params[0];
        String action_name = params[1];
        for (int i = 2; i < params.length; i++)
        {
            temp[i-2] = params[i];
        }
        result = callWebService(method_name, action_name, temp, 60);
        dialog.dismiss();
        return result;
    }

}

Luego, el resultado se convierte en una cadena y se usa normalmente. Así es como llamo a AsyncTask y proceso mi resultado:

Object result = new webServiceCall().execute(UserArgs);


        String str = result.toString();
        String delims = "[=;]+";
        String [] stringuser = str.split(delims);

preguntado el 08 de noviembre de 11 a las 14:11

¿Parece un toString que se usa defectuoso si desea la respuesta? -

En realidad, sí, tomo la respuesta como un objeto y uso .toString (), pero eso es lo que hago fuera de AsyncTask también, y funciona bien. ¿Cómo puedo superar eso? -

Luego, se debe llamar a toString () en un objeto vacío (¿porque se ejecuta antes de que la respuesta esté disponible?) Sería bueno con el código relevante para este problema. No debería ser demasiado difícil de entender :) -

Ok, agregué algo de mi código aquí. También por alguna razón, "OnPostExecute" está resaltado de eclipse como nunca se usó, pero por el momento eso no es muy importante, configuro mi diálogo para que desaparezca al final de doInBackground. -

1 Respuestas

Resultado del objeto = new webServiceCall (). Execute (UserArgs);

Este es tu problema. El nuevo webServiceCall (). Execute (UserArgs); no devuelve el resultado de su asyncTask, solo devuelve una referencia a su tarea. El resultado de su callWebService se envía a onPostExecute (). Es aquí donde puede utilizar el resultado. Llame a una devolución de llamada desde aquí o puede usar el resultado directamente (aquí está de nuevo en el hilo de la interfaz de usuario para que pueda modificar la interfaz de usuario aquí).

respondido 08 nov., 11:20

Ok, el resultado se envía a onPostExecute (), pero eso está marcado por Eclipse como nunca usado localmente, no lo entiendo ... - Athan

¿Qué sucede si agrega @Overridde encima? Si funciona de todos modos, no importa el eclipse, a veces el error y las advertencias de la interfaz de usuario del eclipse no le impiden compilar. Lo siento, no puedo ayudarlo más, necesitaría todo el proyecto si "no" hay una razón para la advertencia. - Tobías

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.