JSON 打包与解析
【推荐】GSON:http://www.cnblogs.com/xiaoluo501395377/p/3446605.html
Android GSON:解析数据 http://blog.csdn.net/ahuier/article/details/16871741Android GSON(十分方便):创建Json数据 http://blog.csdn.net/dp1234/article/details/6232186
Android 自带的org.json解析 Json数据(用循环实现):http://royal2xiaose.iteye.com/blog/1485411
JAVA 库(无法在Android中使用):http://yixiong89921.blog.163.com/blog/static/1325377882012269492090/
KSOAP2:http://yixiong89921.blog.163.com/blog/static/1325377882012269492090/
HTTPCLIENT:http://blog.163.com/ztoplh@126/blog/static/397532512012320102557148/
调用WCF服务
KSOAP2:http://my.oschina.net/u/582329/blog/169266
HTTPCLIENT:http://www.cnblogs.com/yiway/archive/2011/12/16/Consuming_WCF_Serveric_With_Android.html
调用web service的时候容易出现的若干问题:
1、Android Menifest当中需要请求网络的permission
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- 打开internet的权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 查看网络连接状态的权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2、如果在activity当中调用web service必须开启一个线程来执行,不能再主线程当中调用web service.
定义线程
Runnable attemptUpload = new Runnable(){
public void run() {
// TODO Auto-generated method stub
String jsonWeightList=JsonManager.ToJsonUploadWeightList();
String name=UserEntity.getInstance().getName();
int stage=WebServiceManager.uploadWeight(name, jsonWeightList);
Message msg = new Message();
Bundle data = new Bundle();
data.putInt("stage",stage);
msg.setData(data);
handler.sendMessage(msg);
}
};
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bundle data = msg.getData();
int stage = data.getInt("stage");
if (stage==1)
uploadSuccess();
else
showError();
}
};
开启线程
if (NetWorkManager.isNetworkConnected(this.getApplicationContext())){
new Thread(attemptUpload).start();
}
else{
Toast.makeText(this,"手机尚未连接网络", Toast.LENGTH_SHORT).show();
}
以下给出一个如何通过wsdl文件找到NAMESPACE 和SOAP_ACTION的方法
(1)URL是已经发布的web service或者WCF的地址,以下的示例是一个WCF
public static final String URL="http://115.28.42.235/ObesityManager/Services/ObesityManager.svc";
(2)打开这个URL,并点击打开其wsdl说明文件(xml类型)
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:tns="http://tempuri.org/" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:wsa10="http://www.w3.org/2005/08/addressing" xmlns:wsx="http://schemas.xmlsoap.org/ws/2004/09/mex" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" name="ObesityManager" targetNamespace="http://tempuri.org/">
<wsdl:operation name="uploadWeight">
<wsdl:input wsaw:Action="http://tempuri.org/IObesityManager/uploadWeight" message="tns:IObesityManager_uploadWeight_InputMessage"/>
<wsdl:output wsaw:Action="http://tempuri.org/IObesityManager/uploadWeightResponse" message="tns:IObesityManager_uploadWeight_OutputMessage"/>
</wsdl:operation>
<wsdl:operation name="uploadDiet">
<wsdl:input wsaw:Action="http://tempuri.org/IObesityManager/uploadDiet" message="tns:IObesityManager_uploadDiet_InputMessage"/>
<wsdl:output wsaw:Action="http://tempuri.org/IObesityManager/uploadDietResponse" message="tns:IObesityManager_uploadDiet_OutputMessage"/>
</wsdl:operation>
其中targetNamespace就是我们要找的NAMESPACE:
public static final String NAMESPACE = "http://tempuri.org/";
在wsdl当中找到我们写的方法,其中wsdl:input wsaw:Action后面的东西就是我们要的SOAP_ACTION了!其中uploadWeight和uploadDiet是两个方法方法名。
public static final String SOAP_ACTION="http://tempuri.org/IObesityManager/"+methodName;