android - 使用模拟器从 Android 使用 WS

标签 android web-services android-emulator ksoap2

我正在尝试运行一个使用网络服务的 Android 应用程序的简单示例。根据网络上的一些示例,我终于做到了:

private String getValueFromWS()
{
    try
    {
        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

        String weight = "3700";
        String fromUnit = "Grams";
        String toUnit = "Kilograms";

        PropertyInfo weightProp =new PropertyInfo();
        weightProp.setName("Weight");
        weightProp.setValue(weight);
        weightProp.setType(double.class);
        request.addProperty(weightProp);

        PropertyInfo fromProp =new PropertyInfo();
        fromProp.setName("FromUnit");
        fromProp.setValue(fromUnit);
        fromProp.setType(String.class);
        request.addProperty(fromProp);

        PropertyInfo toProp =new PropertyInfo();
        toProp.setName("ToUnit");
        toProp.setValue(toUnit);
        toProp.setType(String.class);
        request.addProperty(toProp);

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

        androidHttpTransport.call(SOAP_ACTION, envelope);
        SoapPrimitive response = (SoapPrimitive)envelope.getResponse();

        return response.toString();
    }
    catch (Exception e)
    {
        return "Error: " + e.getMessage();
    }
}

我还添加了

<uses-permission android:name="android.permission.INTERNET"/>

在 list 文件中。

不知道为什么会抛出异常

androidHttpTransport.call(SOAP_ACTION, envelope);

当它在模拟器上运行时。我使用的是 2.5.8 版本的 kSoap,模拟器运行的是 Android 4.1(16 级)。

我做错了什么?

最佳答案

很抱歉回复晚了,出现异常是因为您正在主 UI 线程上执行网络调用。尝试在 AsyncTask 的 doInBackground() 方法中执行调用以从主线程卸载调用。另一种解决此问题的方法是更改​​可能在 JellyBean (4.x) 模拟器上默认启用的严格模式。您也可以在旧版本的 sdk/emulator (2.3.x) 上尝试您的代码以使其正常工作。

这解释了错误:

http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

关于android - 使用模拟器从 Android 使用 WS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11508387/

相关文章:

android - 抽屉布局采用触摸事件而不是导航 Pane 的元素

android - 将 flex 移动项目转换为 flex web 项目

ios - 使用核心 api 上传 DropBox 文件 https ://api-content. dropbox.com/1/files/<root>/<path>

ios - 在 Web 服务调用响应中自动填充文本

php - 从 ios Web 服务登录 android?

android-studio - 如何将在 WSL2 中运行的 Android Studio 与连接的设备或在主机上运行的 Android 模拟器连接起来

安卓5.0模拟器打不开

android - 我如何使用 Youwave (for android) 作为 Android Studio 的模拟器?

android - 如何根据宽度以编程方式在 Android 网格中设置高度?

android - 来自服务器的数据未保存在共享首选项中