[Android]调用Web Service上传Json格式数据

JSON 打包与解析

【推荐】GSON:http://www.cnblogs.com/xiaoluo501395377/p/3446605.html

Android GSON:解析数据 http://blog.csdn.net/ahuier/article/details/16871741
Android 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/


调用web service
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();
		}


3、使用Ksoap2调用web service需要正确给出三个值 URL,NAMESPACE,SOAP_ACTION,如果前面两点都已经注意了,那么一般问题就出在这一步了。

以下给出一个如何通过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;





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值