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


1.首先本人做的也是简单webserivce且能调试通就可以,所以新建了一个空网站:

android 项目中可以调用dll库吗 android studio调用类_android

名字可以随便取的啦。

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

android 项目中可以调用dll库吗 android studio调用类_java_02

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

android 项目中可以调用dll库吗 android studio调用类_android_03

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

android 项目中可以调用dll库吗 android studio调用类_移动开发_04

以上就是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) 

android 项目中可以调用dll库吗 android studio调用类_android_05

 

android 项目中可以调用dll库吗 android studio调用类_移动开发_06

1.2 切换到Project面板

  

android 项目中可以调用dll库吗 android studio调用类_android_07

 

  

android 项目中可以调用dll库吗 android studio调用类_java_08

  右键Add as Library…,弹出对话框,OK就行了。

  

android 项目中可以调用dll库吗 android studio调用类_android_09

 

 

<?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 项目中可以调用dll库吗 android studio调用类_移动开发_10