android ksoap2 ответ на вопрос - PullRequest
       18

android ksoap2 ответ на вопрос

0 голосов
/ 08 ноября 2011

У меня есть приложение для Android, которое вызывает веб-службу несколько раз по всему приложению.Поскольку вызов метода ksoap2 делает приложение нереагирующим, мне пришлось поместить все это в класс AsyncTask.

Все, что я сделал, это сделал, чтобы ProgressDialog появился в onPreExecute (), и вызов веб-службы в doInBackground, как это было сделано в моей основной программе.Однако, хотя вызов веб-службы работает, ответ веб-службы «com.SmartInfinity.InfinityMain$webServiceCall@40697618».К сведению, com.SmartInfinity - это мой пакет приложений, InfinityMain - моя основная деятельность, а webServiceCall - метод, который вызывает веб-сервис.

Кто-нибудь знает, почему это происходит?Предполагается, что веб-сервис возвращает результаты как «[field_x1 = value_x1; field_y1 = value + y1; field_x2 = value_x2; field_y2 = value_y2;]" Когда я вызываю ту же функцию с теми же аргументами вне AsyncTask, она отлично работает.

Спасибо за вашу помощь.

Редактировать: вот мой код:

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

}

Результат затем преобразуется в строку и используется как обычно.Вот как я вызываю AsyncTask и обрабатываю свой результат:

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


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

1 Ответ

1 голос
/ 08 ноября 2011

Объект result = new webServiceCall (). Execute (UserArgs);

Это твоя проблема. Новый webServiceCall (). Execute (UserArgs); не возвращает результат вашего asyncTask, он только возвращает ссылку на вашу задачу. Результат вашего callWebService отправляется в onPostExecute (). Именно здесь вы можете использовать результат. Либо вызовите обратный вызов отсюда, либо вы можете использовать результат напрямую (здесь вы снова в потоке пользовательского интерфейса, так что вы можете изменить пользовательский интерфейс здесь).

...