使用Android Studio开发调用.NET Webservice 之初体验
本人是。NET出身 但苦于领导要让研究Android 外壳然后准备套html5 ,当试验兵真坑啊 但也没办法 咱还得研究啊,索性 不辜负领导的期望(也研究好两三天了)总算弄明白了 app本地存储 和 Android Studio 调用 Webservice 了,中间出现了好几处问题 ,自己也百度了好久 都没有解决我的问题,且它们那些答案都是复制粘贴下根本就没有测试可不可以 就贴出来了 这我就很气愤啊 下面为了给和我一样的新手和想研究的各位一点便利,把自己遇到的问题与如何解决分享下 以便自己也加深印象。
如有不对了还请不要喷 请@我呦!
1.首先本人做的也是简单webserivce且能调试通就可以,所以新建了一个空网站:

名字可以随便取的啦。
2.最好在建立一个web窗体,这样你在发布的时候就有个初始的页面了,不至于没有初始页面。

里面文字随便写下:初始Index

3.新建一个WebService 服务:便于测试 随便返回几个文字就好:

以上就是C# VS webservice的创建了,下面才是重头戏:Android Studio开始
在写代码之前需要下载并导入jar 工具类包。
Google为Android平台开发Web Service客户端提供了ksoap2-android项目,但这个项目并未直接集成在Android平台中,还需要开发人员自行下载。为Android应用增加ksoap2-android运行请按如下步骤进行:
1.1 登录http://simpligility.github.io/ksoap2-android/getting-started.html站点,下拉一直到如下界面。(另:再见,Google Code,你好,GitHub)
此时最新为3.6.1,我下载的是3.3.0。
1.2 切换到Project面板
将ksoap2JAR包直接复制粘贴到app->libs目录下
右键Add as Library…,弹出对话框,OK就行了。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.user.app_webservice3.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:id="@+id/textView" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="显示"
android:id="@+id/button"
android:layout_below="@+id/textView"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="109dp" />
</RelativeLayout>
design界面如下图所示:
4. MainActivity.java
//访问网络同时加入这个 @SuppressLint("NewApi")
protected void onCreate(Bundle savedInstanceState) {
//允许使用webervice同时启用网络访问
StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
queryButton = (Button) findViewById(R.id.button);
queryButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getRemoteInfo();
}
}); }
public void getRemoteInfo() {
// 命名空间 String nameSpace = "http://tempuri.org/";
// 调用的方法名称 String methodName = "HelloWorld";
// EndPoint String endPoint = "http://192.168.16.39:1215/WebService.asmx";
// SOAP Action String soapAction = "http://tempuri.org//HelloWorld/";
// 指定WebService的命名空间和调用的方法名
SoapObject rpc = new SoapObject(nameSpace, methodName);
// 设置需调用WebService接口需要传入的两个参数mobileCode、userId
//rpc.addProperty("mobileCode", phoneSec);
//rpc.addProperty("userId", "");
// 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.bodyOut = rpc;
// 设置是否调用的是dotNet开发的WebService
envelope.dotNet = true;
(new MarshalBase64()).register(envelope);
// 等价于envelope.bodyOut = rpc;
envelope.setOutputSoapObject(rpc);
HttpTransportSE transport = new HttpTransportSE(endPoint);
transport.debug=true;
try {
// 调用WebService
transport.call(soapAction, envelope);
if (envelope.getResponse() != null) {
System.out.println(envelope.getResponse());
result = String.valueOf(envelope.getResponse());
Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT) .show();
} } catch (Exception e) { e.printStackTrace(); }
报错总结:
调用webserivce时返回错误:服务器未能识别 HTTP 头 SOAPAction 的值: http://tempuri.org/HelloWorld/......省略。
请根据请求的本地webservice SOAP版本来设置值:
如果为SOAP 1.2的请求和响应示例 那么SoapEnvelope 也需要改 :12 如不行试试11或10;
另外一个报错:android.os.NetworkOnMainThreadException :是网络请求在MainThread中产生的异常
原因是在onCreate()方法中不能同时使用网络访问
搜索原因说,从Honeycomb SDK(3.0)开始,google不再允许网络请求(HTTP、Socket)等相关操作直接在Main Thread类中,其实本来就不应该这样做,
直接在UI线程进行网络操作,会阻塞UI、用户体验相当bad!
现在我的代码已解决这个问题,使之不用线程也可以调用,简单测试可以,如果拥于大项目请详细查询 我就不多说了。

使用Android Studio开发调用.NET Webservice 之初体验的更多相关文章
- 《Android Studio开发实战 从零基础到App上线》资源下载和内容勘误
转载于:https://blog.csdn.net/aqi00/article/details/73065392 资源下载 下面是<Android Studio开发实战 从零基础到App上线&g ...
- 使用 Android Studio 开发 widget 安卓桌面插件
•What AppWidget 即桌面小部件,也叫桌面控件,就是能直接显示在Android系统桌面上的小程序: 这么说可能有点抽象,看图: 像这种,桌面上的天气.时钟.搜索框等等,都属于 APP Wi ...
- 使用Android Studio开发J2SE项目方法
0.前言 最近因为要为项目开发一个底层的Java应用,所以非常偶然的遇到了这样一个问题,过去Eclipse有Java Project而现在手头使用Android Studio并不能直接建立Java应用 ...
- Android studio 开发环境搭建
Android studio 开发环境搭建 一.环境: 下载java jdk:http://www.oracle.com/technetwork/cn/java/javase/downloads/jd ...
- 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)
. 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...
- Android Studio开发环境配置以及相关说明
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这里简单记录下在开发的时候使用的Android Studio开发环境版本以及相关注意事项. 一般来讲,每隔一段时间就要检查下Andr ...
- 【Android Studio安装部署系列】二、Android Studio开发环境搭建
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio开发环境安装步骤 下载Android Studio 下载地址: http://www.wanandroi ...
- 怎么分辨是eclipse还是 android studio开发的
eclipse开发的一般都会带.classpath文件.Android studio开发的一般都会有.gradle文件夹和build.gradle文件
- 在Android Studio中调用so中的方法
本节用的so是上节用Android Studio创建的so.想在Android Studio中调用so中的方法,需要先引用so.Android Studio中引用so的方法有二种,下面开始介绍. 一 ...
随机推荐
- 二分查找iOS
二分查找(也称折半查找)是很常见的一种在数组中查找数据的算法,作为一名程序员是应该必须会的.它的基础思想:获取数组的中间值,将数组分割成两份,利用查找的值跟中间值进行比较,如果查找的值大于中间值,就在 ...
- USACO Section2.1 Healthy Holsteins 解题报告 【icedream61】
holstein解题报告 --------------------------------------------------------------------------------------- ...
- fiddler如何抓取夜神模拟器上的包
一.设置Fiddler代理 1.点击Tools-Fiddler Options进入Fiddler Options页面 2.点击Connections,将Fiddler listens on port设 ...
- JMeter学习笔记(五) 文件上传接口测试
此次测试的是上传图片接口,我把测试情况整理了一下,其他的上传文件接口都类似. 1.我通过jmeter的录制功能获取到了接口地址以及相关参数,如果有接口文档就会方便很多,此步骤就不多做说明了 2.因为上 ...
- 孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归
孤荷凌寒自学python第十九天python函数嵌套与将函数作为返回对象及闭包与递归 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python函数非常的灵活,今天学习了python函数的以 ...
- codeforces Registration system
Registration system A new e-mail service "Berlandesk" is going to be opened in Berland in ...
- STL之set&multiset使用简介
关于set,必须说明的是set关联式容器.set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序.应该注 ...
- hadoop +streaming 排序总结
参考http://blog.csdn.net/baidu_zhongce/article/details/49210787 hadoop用于对key的排序和分桶的设置选项比较多,在公司中主要以KeyF ...
- 六、vue侦听属性
$watch 实际上无论是 $watch 方法还是 watch 选项,他们的实现都是基于 Watcher 的封装.首先我们来看一下 $watch 方法,它定义在 src/core/instance/s ...
- windows系统设备管理器显示全部硬件
下面的小命令能让隐藏的未卸载掉的硬件设备彻底现身:开始-运行-CMD C:\> C:\>start devmgmt.msc 之后再在Windows 的设备管理器中,单击菜单“显示”-“显示 ...
