使用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的方法有二种,下面开始介绍. 一 ...
随机推荐
- pdo事务
$pdo->beginTransaction() $pdo->commit() $pdo->rollback();
- NetCore log4net 集成以及配置日志信息不重复显示或者记录
NetCore log4net 集成,这是一个很常见而且网上大批大批的博文了,我写这个博文主要是为了记录我在使用过程中的一点小收获,以前在使用的过程中一直没有注意但是其实网上说的不清不楚的问题. 官方 ...
- linux 检测进程是否存在
1. 直接遍历/proc目录 int find_pid_by_name( char* pidname, pid_t *pidlist) { #define READ_BUF_SIZE 256 DIR ...
- centos使用--supervisor使用
目录 1 下载程序并安装 2 编辑配置文件 3 supervisor的使用 4 配置文件详细解析 参考资料 supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变 ...
- USACO刷题之路,开始了
几天前,重新开始刷题了. 重新刷题有几个原因: 1.曾经的OI经历,如今除了悟性高些.知识多些,大多已经遗忘.不希望真的让之前的OI水平就这么丢了. 2.越来越觉得,刷题真的是一件很开心的事情.大学中 ...
- 【志银】NYOJ《题目529》flip
题目:flip 题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=529 吐槽Time: 由于此题槽点太多,所以没忍住... 看到这题通过率出 ...
- [codeforces] 25E Test || hash
原题 给你三个字符串,找一个字符串(它的子串含有以上三个字符串),输出此字符串的长度. 先暴力判断是否有包含,消减需要匹配的串的数量.因为只有三个字符串,所以暴力枚举三个串的位置关系,对三个串跑好哈希 ...
- POJ 2891 Strange Way to Express Integers | exGcd解同余方程组
题面就是让你解同余方程组(模数不互质) 题解: 先考虑一下两个方程 x=r1 mod(m1) x=r2 mod (m2) 去掉mod x=r1+m1y1 ......1 x=r2+m2y2 . ...
- 洛谷 P3302 [SDOI2013]森林 解题报告
P3302 [SDOI2013]森林 题目描述 小\(Z\)有一片森林,含有\(N\)个节点,每个节点上都有一个非负整数作为权值.初始的时候,森林中有\(M\)条边. 小Z希望执行\(T\)个操作,操 ...
- 远程桌面RDP不能粘贴文本
刚才用远程桌面 登陆 服务器,突然发现不能在本机和远程服务器之间粘贴文本了,即不能从本机复制文本粘贴到服务器,也不能从服务器复制文本粘贴到本机. 在服务器上打开任务管理器,查看进程,有 rdpclip ...