0

ksoap ライブラリを使用し、.NET Web サービスと通信するソフトウェアを開発しました。

Android 2.2バージョンでは、すべて正常に高速に動作します。

最近、私は 2.3.3 Android バージョンへの移行を余儀なくされました。

プロジェクトのプロパティを 2.3.3 に変更してコンパイルしました。

いくつかのバグがありますが、私が最も心配しているのは、Web サービスとの通信が非常に遅いことです...

ksoap 2.5.7 バージョンを使用しています...

とアイデア??

前もって感謝します!

私のメイクリクエスト機能:

public void MakeRequest(final String MethodName,
        final PropertyInfo[] props, final ResponseListener resListener,
        final int timeout, final int retries)
{

    GeneralMethods.debug(this.getClass().toString(), "MakeRequest",
            "MethodName=" + MethodName);
    for (PropertyInfo prop : props)
    {
        if (prop != null && prop.getValue() != null)
            GeneralMethods.debug(this.getClass().toString(), "MakeRequest",
                    prop.name + "=" + prop.getValue().toString());
    }

    final Handler uiThreadCallback = new Handler();

    final Thread RequestThread = new Thread()
    {
        public void run()
        {
            try
            {

                SoapObject Request = new SoapObject(NAMESPACE, MethodName);

                // adding properties
                if (props != null)
                    for (PropertyInfo pi : props)
                    {
                        if (pi.getValue() != null
                                && isComplexType(pi.getValue().getClass()
                                        .getName()))
                        {
                            PropertyInfo complexProp = new PropertyInfo();
                            complexProp
                                    .setValue(getSoapClass(pi.getValue()));
                            complexProp.setName(pi.getName());
                            Request.addProperty(complexProp);

                        }
                        else
                            Request.addProperty(pi);
                    }

                // Set the web service envelope
                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                        SoapEnvelope.VER11);
                envelope.dotNet = true;
                envelope.setOutputSoapObject(Request);
                HttpTransportSE androidHttpTransport = new HttpTransportSE(
                        URL, timeout);
                androidHttpTransport.debug = true; // TODO: comment it on
                                                    // finish debug

                // Load cookies
                List<HeaderProperty> httpHeaders = new ArrayList<HeaderProperty>();
                for (String cookie : cookies.keySet())
                {
                    httpHeaders.add(new HeaderProperty("Cookie", cookie
                            + "=" + cookies.get(cookie)));
                }

                // Call the web service and retrieve result


                @SuppressWarnings("rawtypes")
                List reshttpHeaders = androidHttpTransport.call(NAMESPACE
                        + MethodName, envelope, httpHeaders);


                // save cookies
                 Log.d("DEBUG OUTGOING XML",
                 androidHttpTransport.requestDump);
                androidHttpTransport.debug = true;
                 Log.d("DEBUG INCOMING XML=========================================",
                 androidHttpTransport.responseDump);
                if (reshttpHeaders != null)
                {
                    for (int i = 0; i < reshttpHeaders.size(); i++)
                    {
                        HeaderProperty hp = (HeaderProperty) reshttpHeaders
                                .get(i);
                        String key = hp.getKey();
                        String value = hp.getValue();
                        if (key != null && value != null)
                        {
                            if (key.equalsIgnoreCase("set-cookie"))
                            {
                                String cookieString = value.substring(0,
                                        value.indexOf(";"));

                                cookies.put(cookieString.substring(0,
                                        cookieString.indexOf("=")),
                                        cookieString.substring(cookieString
                                                .indexOf("=") + 1));
                                break;
                            }
                        }
                    }

                }
                // Log.i("test", httpHeaders.toString());
                // final Object res = envelope.getResponse();
                final Object res = envelope.getResponse();
                uiThreadCallback.post(new Runnable()
                {
                    public void run()
                    {
                        // Log.i("Talk2Doc", res.toString());
                        GeneralMethods.debug(this.getClass().toString(),
                                "MakeRequest", "Responce -> MethodName="
                                        + MethodName);

                        resListener.onGotResponse(res);

                    }
                });

            }
            catch (final Exception e)
            {
                GeneralMethods.debug(this.getClass().toString(),
                        "MakeRequest", "Error -> MethodName=" + MethodName
                                + ", Error=" + e.getMessage());
                uiThreadCallback.post(new Runnable()
                {
                    public void run()
                    {

                        e.printStackTrace();

                        if (e.getMessage().contains("login failed"))
                            resListener.onLoginError();
                        else
                        {

                            if (retries < 1
                                    || e.getClass() == SocketTimeoutException.class)
                                resListener.onResponseError(e);
                            else
                            {
                                // retry

                                MakeRequest(MethodName, props, resListener,
                                        timeout, retries - 1);

                            }

                        }

                    }
                });

            }
        }
    };
    RequestThread.start();

}
4

1 に答える 1

0

プロジェクトマニフェストファイルで最小SDKバージョンを8に設定してみてください。結果を返信してください。つまりandroid:minSdkVersion="8"AndroidManifestファイルに入れて、結果を返信してください。

于 2012-11-22T11:15:28.217 に答える