如何从 android 调用 ksoap web 服务?

2023-11-24

我有一个小困惑,在我们的移动应用程序中,有一个从 ios 调用的 ksoap Web 服务,如下所示:并正确获取数据。在下面的Web服务中,您可以从以下代码中看到,有一些参数需要传递给Web服务。

 -(void)callwebservice{
    NSString *soapMessage = [NSString stringWithFormat:
                             @"<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\"><s:Body><Calculate xmlns=\"http://tempuri.org/\"><inputRate>%@</inputRate><rateFrequency xmlns:a=\"http://schemas.datacontract.org/2004/07/FusionPeople.MobileContractor.DomainModel\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><a:RateFrequencyId>0</a:RateFrequencyId><a:RateFrequencyName>%@</a:RateFrequencyName></rateFrequency><nonTaxableExpense>%@</nonTaxableExpense><expenseFrequency xmlns:a=\"http://schemas.datacontract.org/2004/07/FusionPeople.MobileContractor.DomainModel\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><a:RateFrequencyId>0</a:RateFrequencyId><a:RateFrequencyName>%@</a:RateFrequencyName></expenseFrequency></Calculate></s:Body></s:Envelope>\n",txtinputrate.text,lblrate.text,txtexpenses.text,lblexpense.text
                             ];

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@MobileContractorCalculationService.svc",[MobileContractorAppDelegate getstrIpAddress] ]];
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
    NSString *msgLength = [NSString stringWithFormat:@"%d",[soapMessage length]];
    [theRequest addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [theRequest addValue:@"http://tempuri.org/IMobileContractorCalculationService/Calculate" forHTTPHeaderField:@"SOAPAction"];
    [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
    [theRequest setHTTPMethod:@"POST"];
    [theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
    if( theConnection ){
        webData = [NSMutableData data] ;
    }
}

在 Android 端的另一边,我尝试了很多方法来调用此 Web 服务并将数据传递到 Web 服务。但是每次我收到服务器端错误代码:415,请有人帮助我并告诉我如何将此分层数据传递给这种类型的 ksoap Web 服务......

我尝试过以下代码:

try {

             SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

             request.addProperty("inputRate", 1000);

             SoapObject rate = new SoapObject(SOAP_ACTION, "rateFrequency");

             PropertyInfo info = new PropertyInfo();
             info.setName("RateFrequencyId");
             info.setValue(0);
             rate.addProperty(info);

             PropertyInfo info2 = new PropertyInfo();
             info2.setName("RateFrequencyName");
             info2.setValue("Hourly");
             rate.addProperty(info2);

             request.addProperty("rateFrequency", rate);

             request.addProperty("nonTaxableExpense", 500);

             SoapObject exp = new SoapObject(SOAP_ACTION, "expenseFrequency");

             PropertyInfo info3 = new PropertyInfo();
             info3.setName("RateFrequencyId");
             info3.setValue(0);
             exp.addProperty(info3);

             PropertyInfo info4 = new PropertyInfo();
             info4.setName("RateFrequencyName");
             info4.setValue("Hourly");
             exp.addProperty(info4);

             request.addProperty("expenseFrequency", exp);

             Log.v("", "=========== Request : " + request);

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

             try {
             androidHttpTransport.call(SOAP_ACTION, envelope);
             SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
             Log.v("myApp",
             "========================== Res" + response.toString());



             } catch (Exception e) {
             e.printStackTrace();
             }

但它出现以下错误:

    09-09 14:33:18.054: V/(957): =========== Request : Calculate{inputRate=1000; rateFrequency=rateFrequency{RateFrequencyId=0; RateFrequencyName=Hourly; }; nonTaxableExpense=500; expenseFrequency=expenseFrequency{RateFrequencyId=0; RateFrequencyName=Hourly; }; }
09-09 14:33:30.264: W/System.err(957): java.io.IOException: HTTP request failed, HTTP status: 500
09-09 14:33:30.264: W/System.err(957):  at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:195)
09-09 14:33:30.264: W/System.err(957):  at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:116)
09-09 14:33:30.264: W/System.err(957):  at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:111)
09-09 14:33:30.264: W/System.err(957):  at com.example.ksoapwebserviceexample.MainActivity.call(MainActivity.java:318)
09-09 14:33:30.264: W/System.err(957):  at com.example.ksoapwebserviceexample.MainActivity$testReq.doInBackground(MainActivity.java:185)
09-09 14:33:30.264: W/System.err(957):  at com.example.ksoapwebserviceexample.MainActivity$testReq.doInBackground(MainActivity.java:1)
09-09 14:33:30.274: W/System.err(957):  at android.os.AsyncTask$2.call(AsyncTask.java:185)
09-09 14:33:30.274: W/System.err(957):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-09 14:33:30.274: W/System.err(957):  at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-09 14:33:30.274: W/System.err(957):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
09-09 14:33:30.274: W/System.err(957):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
09-09 14:33:30.274: W/System.err(957):  at java.lang.Thread.run(Thread.java:1096)

尝试以下示例。

  1. ksoap-android-web-service-教程

  2. android-调用-web-service-使用-ksoap2-将值传递到-web-service

希望这能解决您的问题

我使用以下方法来调用soap web-service

public String getServiceResponse(String nameSpace, String methodName,
        String soapAction, String Url, List<PropertyInfo> mPropertyInfo) {

    String mResponse = "";
    SoapObject request = new SoapObject(nameSpace, methodName);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
            SoapEnvelope.VER11);
    if (mPropertyInfo != null) {
        for (PropertyInfo propertyInfo : mPropertyInfo) {
            request.addProperty(propertyInfo);
        }
    }
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);

    HttpTransportSE ht = new HttpTransportSE(Url);
    ht.debug = true;
    try {
        ht.call(soapAction, envelope);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (XmlPullParserException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
    try {
        mResponse = envelope.getResponse().toString();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return mResponse;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 android 调用 ksoap web 服务? 的相关文章

  • 如何在 Android 中保存相机的临时照片?

    在尝试从相机拍照并将其保存到应用程序的缓存文件夹中时 我没有得到任何可见的结果 应用程序不会崩溃 但在 LogCat 上 当我尝试将 ImageView src 字段设置为刚刚获取的文件的 URI 时 我收到此消息 09 17 14 03
  • 使用workmanager时Firestore脱机持久性错误

    我正在使用一个WorkManger定期从我的中检索信息Firestore当应用程序处于后台和前台时的数据库 此信息用于根据状态更新 UI 因此不同的状态会添加或删除 UI 的不同部分 第一次运行时效果很好 但是 一旦应用程序处于后台并且Wo
  • Android 后退按钮无法与 Flutter 选项卡内的导航器配合使用

    我需要在每个选项卡内有一个导航器 因此当我推送新的小部件时 选项卡栏会保留在屏幕上 代码运行得很好 但是 android 后退按钮正在关闭应用程序而不是运行 Navigator pop import package flutter mate
  • Adobe 是否为其 PDF 阅读器提供 Android SDK 或 API? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我希望能够在我们的应用程序内的视图中显示本地 PDF 文件 在 Android 4 03 下的平板电脑上运行 目前 我们将 Adob eR
  • 找不到处理意图 com.instagram.share.ADD_TO_STORY 的活动

    在我们的 React Native 应用程序中 我们试图让用户根据视图 组件中的选择直接将特定图像共享到提要或故事 当我们尝试直接使用 com instagram share ADD TO FEED 进行共享时 它以一致的方式完美运行 但是
  • Android 模拟器插件无法初始化后端 EGL 显示

    我在 Cloudbees 上设置了 Jenkins 作业 并且可以在那里成功签出并编译我的 Android 项目 现在我想在 android 模拟器中运行一些 JUnit 测试并添加 Android 模拟器插件 我将 显示模拟器窗口 选项设
  • Android 中 Kotlin 协程的正确使用方式

    我正在尝试使用异步更新适配器内的列表 我可以看到有太多的样板 这是使用 Kotlin 协程的正确方法吗 这个可以进一步优化吗 fun loadListOfMediaInAsync async CommonPool try Long runn
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 是否有 ADB 命令来检查媒体是否正在播放

    我想使用 ADB 命令检查根植于终端的外部设备中是否正在播放音频 视频 我无法找到任何 ADB 命令 如果有 我尝试过 adb shell dumpsys media player 我想要一个命令来指定视频是否正在运行 您可以使用以下命令查
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 原色(有时)变得透明

    我正在使用最新的 SDK 版本 API 21 和支持库 21 0 2 进行开发 并且在尝试实施新的材料设计指南时遇到了麻烦 材料设计说我需要有我的primary color and my accent color并将它们应用到我的应用程序上
  • Google 云端硬盘身份验证异常 - 需要许可吗? (v2)

    我一直在尝试将 Google Drive v2 添加到我的 Android 应用程序中 但无法获得授权 我收到 UserRecoverableAuthIOException 并显示消息 NeedPermission 我感觉 Google A
  • 我想实现下面的布局,按钮应该在屏幕底部,当惰性列被填充时,按钮不应该出去

    顶部有惰性列 惰性列下方有输入电话号码布局并从电话簿布局添加联系人 我希望当未添加联系人时此布局位于顶部 当我添加大量联系人时输入电话号码并添加电话簿布局中的联系人会随着惰性列滚动并移出屏幕 我不让他们走出屏幕 当接触较多时 它们必须粘在底
  • 在 android DatePickerDialog 中将语言设置为法语

    有什么办法可以让日期显示在DatePickerDialog用法语 我已经搜索过这个但没有找到结果 这是我的代码 Calendar c Calendar getInstance picker new DatePickerDialog Paym
  • Android Studio 0.4.3 Eclipse项目没有gradle

    在此版本之前 在 Android Studio 中按原样打开 Eclipse 项目似乎很容易 无需任何转换 我更喜欢 Android Studio 环境 但我正在开发一个使用 eclipse 作为主要 IDE 的项目 我不想只为这个项目下载
  • Android Studio - Windows 7 上的 Android SDK 问题

    我对 Google i o 2013 上发布的最新开发工具 Android Studio 有疑问 我已经成功安装了该程序并且能够正常启动 我可以导入现有项目并对其进行编辑 但是 当我尝试单击 SDK 管理器图标或 AVD 管理器图标时 或者
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 将 Intent 包装在 LabeledIntent 中以用于显示目的

    要求 我的应用程序中有一个 共享 按钮 我需要通过 Facebook 分享 我需要选择是否安装原生 Facebook 应用程序 我们的决定是 如果未安装该应用程序 则将用户发送到 facebook com 进行分享 当前状态 我可以检测何时
  • 将两个文本视图并排放置在布局中

    我有两个文本视图 需要在布局中并排放置 并且必须遵守两条规则 Textview2 始终需要完整显示 如果布局中没有足够的空间 则必须裁剪 Textview1 例子 文本视图1 文本视图2 Teeeeeeeeeeeeeeeeeextview1
  • 如何将 google+ 登录集成到我的 Android 应用程序中?

    大家好 实际上我需要通过我的应用程序从 google 登录人们 现在我阅读了 google 上的文档 其中指出 要允许用户登录 请将 Google Sign In 集成到您的应用中 初始化 GoogleApiClient 对象时 请求 PL

随机推荐

  • greendao 字符串主键 - 如何使用

    在 greendao 常见问题解答中 它说 从 greenDAO 开始 对字符串主键的支持有限 http greendao orm com documentation technical faq 我找不到任何地方说明如何执行此操作 我使用
  • foreach 块缺少结束符“}”

    我今天玩 Razor 很开心 你能看出这个观点有什么问题并解释为什么它是错误的吗 foreach var item in Model if item ID PreviousOrderId div class orderdetail div
  • 当没有更多工作要做时,防止 boost::asio::io_context 返回

    boost asio io context run 当没有待处理的工作时确实返回 我想避免这种行为 以便run 确实无限期地等待新作品 并且可以从另一个线程停止它 我想 这可以通过在io context 并通过调用cancel 当我们想要的
  • 如何为特定类型的所有实例实现我自己的自定义属性编辑器?

    我已经遵循了一些关于创建自定义属性编辑器对话框的教程 但是涉及的事情太多 我无法让它正常工作 我想要完成的是一个带有日期选择器 日历 时间选择器以及 确定 和 取消 按钮的自定义表单 该表单完全没有问题 但是我将如何实现它 以便我可以通过启
  • 解开嵌入式资源的困惑

    编辑 阅读 Tim Schmelter 的答案 1 然后使用此问题作为如何嵌入资源并在运行时访问它们的示例 嵌入式资源的主题经常出现 尤其是当人们询问如何在运行时访问嵌入式文件时 事情变得更加混乱 因为 Visual Studio 为您提供
  • 在 C++ 中打开并显示图像?

    基本上我正在自学 C 程序功能的一部分是打开和关闭指定的图像 我该怎么做呢 或者我会使用什么资源 Thanks 在 C 中 无需任何额外的库 您可以打开图像 但除了一堆二进制数据之外 不会有什么特别有用的东西 那么你必须使用你自己的解码器
  • 分散数组中的重复项

    来源 谷歌面试问题 编写一个例程以确保输入中的相同元素在输出中最大程度地分布 基本上 我们需要放置相同的元素 以这样的方式TOTAL传播是尽可能最大的 Example Input 1 1 2 3 2 3 Possible Output 1
  • Linq 列表中的部分匹配?

    我有一个需要在表中匹配的部分字符串列表 我正在使用谓词构建器 var predicate PredicateBuilder False
  • Mac 上的 RStudio Python 版本更改

    我的问题是 如何将 python 版本更改为 anaconda 3 5 并可以在 RStudio 中使用 anaconda 中安装的模块 我正在使用 RStudio 版本 0 99 891R版本3 2 3 2015 12 10 平台 x86
  • 保存文件时出现权限错误(沙箱)

    我正在尝试将文件保存到沙盒应用程序 OS X 中的路径 但到目前为止 几乎每次尝试保存时都会遇到错误 错误是 Error saving Error Domain NSCocoaErrorDomain Code 513 You don t h
  • 为 iOS Metal 中 MTLBuffer 使用的数据分配内存

    作为后续问题这个答案 我正在尝试用 Metal 中的内核函数替换 CPU 上运行的 for 循环 以并行化计算并提高性能 我的函数基本上是一个卷积 由于我反复收到输入数组值的新数据 数据源于AVCaptureSession 似乎使用newB
  • Java Comparator 给出要比较的属性的名称

    我的问题是这样的 我必须订购一个数据表 表的每一行都是一个存储在 List 中的对象 我们称之为 TableObject 每列数据都是该类的一个属性 通常是字符串 当用户单击任何列时 我必须执行典型的数据排序 所以我考虑将 List 更改为
  • gdb如何显示线程名称

    我的应用程序中创建了许多线程 当我执行命令 infothreads 时 一些线程名称在 gdb 中可见 而其他线程名称则不显示 如何获取所有线程名称本身而不是像 0xb7fe1424 这样的十六进制值 4 Thread 0xb68ffb70
  • 在 Open XML SDK 中的单词书签后插入 OpenXmlElement

    我可以使用以下代码访问我的Word文档中的书签 var res from bm in mainPart Document Body Descendants
  • 如何复制 FTP 服务器上的文件?

    如何复制 FTP 服务器上的文件 我的目标是复制ftp www mysite com test jpg to ftp www mysite com testcopy jpg 要重命名文件 我会使用 var request FtpWebReq
  • 导航栏 rightbaritem 图像按钮错误 iOS 11

    这段代码在ios10上运行正常 我得到了我的标签和一个图像按钮 这是用户照片个人资料 圆形 好的 但是当运行 xcode 9 ios11 模拟器时 我发现它被拉伸了 按钮框架必须是 32x32 当检查 sim 并获取视图并告诉 xcode
  • 如何在日期选择器对话框中设置日期限制

    我想对日期进行限制 以便用户不能选择更多的日期 例如 如果今天是 1 月 1 日 那么用户不应选择超过 7 个日期 我的意思是他不能选择 1 月 9 日 我还希望他不要选择月份和年份 所以我限制他在一周内完成任务 到目前为止我所做的是显示日
  • 为什么 NodeJS KeepAlive 似乎没有按预期工作?

    引自TCP 保活操作方法 为了理解什么是 TCP keepalive 我们将称之为 keepalive 确实如此 您只需读取名称即可 keep TCP 活 这意味着您将能够检查已连接的套接字 也称为TCP套接字 并判断连接是否是 仍在运行或
  • 使用 Express 从 NodeJS 服务器下载文件

    如何将服务器中的文件下载到访问 NodeJS 服务器中页面的计算机 我正在使用 ExpressJS 并且我一直在尝试这个 app get download function req res var file fs readFileSync
  • 如何从 android 调用 ksoap web 服务?

    我有一个小困惑 在我们的移动应用程序中 有一个从 ios 调用的 ksoap Web 服务 如下所示 并正确获取数据 在下面的Web服务中 您可以从以下代码中看到 有一些参数需要传递给Web服务 void callwebservice NS