android调用webservice方法,参数或返回值使用服务器端类

现在假设调用webservice方法的时候需要传一个对象参数,需要用到服务器端的一个类。

服务器端类是这样的

public class User implements Serializable {
    private String username;
    private Integer age;

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}


webservice接口如下

/**
 * SERVICE_URL:http://192.168.1.101:8080/TestWsImplService/TestWsImpl
 * SERVICE_NAMESCAPE:http://impl.webservices.yinke.com/
 * 测试服务,包含两个方法,一个返回单个字符串,一个返回字符串数组
 * @author Tsingheng
 */
@Local
@WebService
public interface TestWs {
    /**
     * 返回单个字符串测试方法
     * @param testStr 字符串参数,将包含在返回结果中
     * @return 返回单个字符串
     */
    String test(User user);
    /**
     * 返回字符串数组测试方法
     * @return 返回字符串数组
     */
    String[] arrayTest();
}


然后看客户端对应的User类,需要实现KvmSerializable接口

public class User implements KvmSerializable {
	private String username;
	private Integer age;
	
	public User() {

	}
	
	public User(SoapObject obj) {
		this.username = obj.getProperty(0).toString();
		this.username = obj.getProperty(1).toString();
	}
	
	@Override
	public Object getProperty(int arg0) {
		// TODO Auto-generated method stub
		Object obj = null;
		switch (arg0) {
			case 0: {
				obj = this.username;
				break;
			}
			case 1: {
				obj = this.age;
				break;
			}
		}
		return obj;
	}

	@Override
	public int getPropertyCount() {
		// TODO Auto-generated method stub
		return 2;
	}

	@SuppressWarnings("rawtypes")
	@Override
	public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {
		// TODO Auto-generated method stub
		switch(arg0){
			case 0:{
				arg2.name = "username";
				arg2.type = PropertyInfo.STRING_CLASS;
				break;
			}
			case 1:{
				arg2.name = "age";
				arg2.type = PropertyInfo.STRING_CLASS;
				break;
			}
		}
	}

	@Override
	public void setProperty(int arg0, Object arg1) {
		// TODO Auto-generated method stub
		switch(arg0){
			case 0:{
				this.username = arg1.toString();
				break;
			}
			case 1:{
				this.age = (Integer) arg1;
				break;
			}
			}
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

}


 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
	
    <TextView 
        android:id="@+id/testStr"
        android:text="@string/hello_world"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
	
</LinearLayout>


 

public class MainActivity extends Activity {

	private TextView testStr;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		testStr = (TextView) super.findViewById(R.id.testStr);
		
		try {
			User user = new User();
			user.setUsername("Tsingheng");
			user.setAge(22);
			String resultText = stringTest(user);
			testStr.setText(resultText);
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (XmlPullParserException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//测试调用getResultArray方法,返回值为字符串数组。
	private String stringTest(User user) throws IOException, XmlPullParserException{
		SoapObject arraySoapObject = SoapUtil
				.buildSoapObject(ServiceUtil.TEST_METHOD);
		//为方法调用添加参数
		PropertyInfo pi = new PropertyInfo();
		pi.setName("arg0");
		pi.setValue(user);
		pi.setType(User.class);
		arraySoapObject.addProperty(pi);
		String result = SoapUtil.getResultString(ServiceUtil.TEST_SERVICE_URL, arraySoapObject);
		return result;
	}
}


运行结果如下

需要用到的Util类

public class ServiceUtil {
	public static final String SERVER_IP = "192.168.1.101:8080";
	public static final String SERVICE_NS = "http://impl.webservice.yinke.com/";
	public static final String REGIST_SERVICE_URL = "http://" + SERVER_IP + "/RegistWsImplService/RegistWsImpl";
	public static final String OPERATION_SERVICE_URL = "http://" + SERVER_IP + "/OperationWsImplService/OperationWsImpl";
	public static final String MESSAGE_SERVICE_URL = "http://" + SERVER_IP + "/MessageWsImplService/MessageWsImpl";
	public static final String TEST_SERVICE_URL = "http://" + SERVER_IP + "/TestWsImplService/TestWsImpl";
	public static final String REGIST_METHOD = "register";
	public static final String UP_OPERATION_METHOD = "uploadOperation";
	public static final String CHECK_MESSAGE_METHOD = "hasNewMessage";
	public static final String GET_MESSAGEID_METHOD = "getStationMessageIds";
	public static final String GET_MESSAGE_METHOD = "getMessageById";
	public static final String MESSAGE_CONFIRM_METHOD = "messageComfirm";
	public static final String TEST_METHOD = "test";
	public static final String ARRAY_TEST_METHOD = "arrayTest";
}


 

public class SoapUtil {
	public static SoapObject buildSoapObject(String methodName) {
		SoapObject soapObject = new SoapObject(ServiceUtil.SERVICE_NS,
				methodName);
		return soapObject;
	}

	public static SoapObject resultSoapObject(String serviceUrl,
			SoapObject soapObject) throws IOException, XmlPullParserException {
		HttpTransportSE ht = new HttpTransportSE(serviceUrl);
		ht.debug = true;
		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
				SoapEnvelope.VER11);
		envelope.bodyOut = soapObject;
		ht.call(null, envelope);
		if (envelope.getResponse() != null) {
			SoapObject resultSoapObject = (SoapObject) envelope.bodyIn;
			return resultSoapObject;
		}
		return null;
	}
	
	public static String getResultString(String serviceUrl,
			SoapObject soapObject) throws IOException, XmlPullParserException{
		SoapObject resultSoapObject = resultSoapObject(serviceUrl, soapObject);
		if (resultSoapObject != null) return String.valueOf(resultSoapObject.getProperty(0));
		return null;
	}
	
	public static String[] getResultArray(String serviceUrl,
			SoapObject soapObject) throws IOException, XmlPullParserException{
		SoapObject resultSoapObject = resultSoapObject(serviceUrl, soapObject);
		if (resultSoapObject != null){
			String[] result = new String[resultSoapObject.getPropertyCount()];
			for(int i = 0; i < resultSoapObject.getPropertyCount(); i++){
				result[i] = String.valueOf(resultSoapObject.getProperty(i));
			}
			return result;
		}
		return null;
	}
	
}


 

个人觉得如果能不用服务器端类就不要用。OVER,谢谢您的阅读!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值