本人是。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 之初体验的更多相关文章

  1. 《Android Studio开发实战 从零基础到App上线》资源下载和内容勘误

    转载于:https://blog.csdn.net/aqi00/article/details/73065392 资源下载 下面是<Android Studio开发实战 从零基础到App上线&g ...

  2. 使用 Android Studio 开发 widget 安卓桌面插件

    •What AppWidget 即桌面小部件,也叫桌面控件,就是能直接显示在Android系统桌面上的小程序: 这么说可能有点抽象,看图: 像这种,桌面上的天气.时钟.搜索框等等,都属于 APP Wi ...

  3. 使用Android Studio开发J2SE项目方法

    0.前言 最近因为要为项目开发一个底层的Java应用,所以非常偶然的遇到了这样一个问题,过去Eclipse有Java Project而现在手头使用Android Studio并不能直接建立Java应用 ...

  4. Android studio 开发环境搭建

    Android studio 开发环境搭建 一.环境: 下载java jdk:http://www.oracle.com/technetwork/cn/java/javase/downloads/jd ...

  5. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)

    . 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...

  6. Android Studio开发环境配置以及相关说明

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这里简单记录下在开发的时候使用的Android Studio开发环境版本以及相关注意事项. 一般来讲,每隔一段时间就要检查下Andr ...

  7. 【Android Studio安装部署系列】二、Android Studio开发环境搭建

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio开发环境安装步骤 下载Android Studio 下载地址: http://www.wanandroi ...

  8. 怎么分辨是eclipse还是 android studio开发的

    eclipse开发的一般都会带.classpath文件.Android studio开发的一般都会有.gradle文件夹和build.gradle文件    

  9. 在Android Studio中调用so中的方法

    本节用的so是上节用Android Studio创建的so.想在Android Studio中调用so中的方法,需要先引用so.Android Studio中引用so的方法有二种,下面开始介绍. 一 ...

随机推荐

  1. 跨域携带cookie

    $.ajax({ type: "GET", url: "https://upload.cnblogs.com/imageuploader/upload?host=www. ...

  2. laravel5.5用户认证

    目录 1. 命令 2. 快速认证 2.1 自定义路径 2.2 自定义用户名 2.3 自定义看守器 2.4 自定义验证/存储 2.5 Auth::xx() 2.6 保护路由 2.7 指定看守器 3 手动 ...

  3. 《Cracking the Coding Interview》——第1章:数组和字符串——题目4

    2014-03-18 01:36 题目:给定一个字符串,将其中的空格‘ ’替换为‘%20’,你可以认为字符串尾部有足够空间来容纳新增字符.请不要额外开辟数组完成. 解法:先从前往后统计空格个数,然后从 ...

  4. cookie不能删除

    cookie不仅仅包含一个键值对,还包含域 domain  路径path, 一般domain是请求的地址 www.baidu.com/news.html 那domain就是www.baidu.com ...

  5. python 之发送邮件服务[原著] 海瑞博客

    Python 发送邮件 使用默认的django的发送邮件,只适用于单邮箱. 作者:海瑞博客 http://www.hairuinet.com/ setting中配置 # send e-mail EMA ...

  6. winform-实现类似QQ停靠桌面上边缘隐藏的效果

    //实现类似QQ停靠桌面上边缘隐藏的效果! private void timer1_Tick(object sender, EventArgs e) { System.Drawing.Point pp ...

  7. mysql数据库的日常使用

    mysql管理: 首先记得你只要改了权限设置,请记得重启下mysql数据库服务. 适用环境全部是linux环境下适用了. 1.查看mysql服务是否启动 ps -aux | grep mysqld 如 ...

  8. 孤荷凌寒自学python第二十六天python的time模块的相关方法

    孤荷凌寒自学python第二十六天python的time模块的相关方法 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 要使用time模块的相关方法,必须在文件顶端引用: import tim ...

  9. 原始套接字--icmp相关

    icmp请求 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <uni ...

  10. HDU 4725 The Shortest Path in Nya Graph( 建图 + 最短路 )

    主要是建图,建好图之后跑一边dijkstra即可. 一共3N个点,1~N是原图中的点1~N,然后把每层x拆成两个点(N+x)[用于连指向x层的边]和(N+N+x)[用于连从x层指出的边]. 相邻层节点 ...