1:KSOAP2完成POJO对象序列化网络传输
在Android应用中对象的序列化传输总是一个很重要的话题,我们再往程序中提交信息的时候,总是尝试着以对象的形式来封装,然后传递的也是对象。序列化传输是Java的基础知识,具体怎样去用,就属于javaIO的基础知识,此处不做解释,现在我们主要来讨论一下POJO对象在网络中的序列化传输;先假设服务器端数据库中某一个表中有3个字段:uid(int),username(varchar),password(varchar),这里用MySQL数据库做验证,
我们在服务器端创建一个POJO对象包括前面说过的三个属性
user类:要序列化的对象
//创建一个POJO类,用于对象传输
public class User {
private int uid;
private String username;
private String password;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
。。。省略其余两个
public User(int uid, String username, String password) {
super();
this.uid = uid;
this.username = username;
this.password = password;
}
public User() {
super();
}
}
用做数据库连接的DBConn类,要是有时间的话,可以进一步封装;
public class DBConn {
private Connection conn;
private PreparedStatement ptmt;
private ResultSet rs;
//得到数据库连接
private void getConn(){
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://172.31.147.20:3306/user";
String username = "root";
String password = "root";
conn = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
//关闭数据库
public void closeConn(){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(ptmt != null){
try {
ptmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//增删改 操作
public int execOther(final String strSQL,final Object[] params){
this.getConn();
System.out.println("SQL>"+strSQL);
try {
ptmt = conn.prepareStatement(strSQL);
for (int i = 0; i < params.length; i++) {
this.ptmt.setObject(i+1, params[i]);
}
int res = this.ptmt.executeUpdate();
return res;
} catch (SQLException e) {
e.printStackTrace();
}
return -1;
}
//查询操作
public ResultSet execQuery(final String strSQL,final Object[] params){
this.getConn();
System.out.println("SQL>"+strSQL);
try {
ptmt = conn.prepareStatement(strSQL);
for (int i = 0; i < params.length; i++) {
this.ptmt.setObject(i+1, params[i]);
}
ResultSet rs = this.ptmt.executeQuery();
return rs;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
服务器端Dao类UserDao
public class UserDao {
DBConn dbconn = null;
public UserDao() {
super();
this.dbconn = new DBConn();
}
// 用户信息的添加操作
public boolean addUser(final User user) {
//调用JDBC,完成数据库的添加操作
System.out.println("调用UserDao的addUser方法了...");
String username = user.getUsername();
String password = user.getPassword();
String strSQL = "insert into user values(null,?,?)";
System.out.println("strSQL->"+strSQL);
Object params[] = new Object[]{username,password};
int res = dbconn.execOther(strSQL, params);
dbconn.closeConn();
return res>0?true:false;
}
}
现在,我们在服务器端的工作已经做好了,进行Web Service界面的调试,查看是否有问题,如果插入数据不出现异常,说明Web Service --->MySQL成功
然后,我们开发Android端的编写,在Android端建立一个要序列化的类。类名要与服务器端的一致,下面给出代码详细说明一下
Android端User
public class User implements KvmSerializable {
// 这里所有的属性都必须与Server端相同,还要重写4个方法
private int uid;
private String username;
private String password;
........同服务器端程序
//index代表属性的下标,一定要是从0开始
@Override
public Object getProperty(int index) {
Object obj = null;
switch(index){
case 0:
obj = this.uid;
break;
case 1:
obj = this.username;
break;
case 2:
obj = this.password;
break;
}
return obj;
}
//该实体类共有多少属性
@Override
public int getPropertyCount() {
// 这里一定不能写成User.class.getFields().length,要写明白数目
return 3;
}
//得到所有属性的详细信息
@Override
public void getPropertyInfo(int index, @SuppressWarnings("rawtypes") Hashtable arg1, PropertyInfo info) {
switch (index) {
case 0:
info.name = "uid";
info.type = PropertyInfo.INTEGER_CLASS;
break;
case 1:
info.name = "username";
info.type = PropertyInfo.STRING_CLASS;
break;
case 2:
info.name = "password";
info.type = PropertyInfo.STRING_CLASS;
break;
default:
break;
}
}
//设置属性
@Override
public void setProperty(int index, Object obj) {
switch (index) {
case 0:
this.uid = Integer.parseInt(obj.toString());
break;
case 1:
this.username = obj.toString();
break;
case 2:
this.password = obj.toString();
break;
default:
break;
}
}
}
Android端前台界面如下
Activity逻辑代码:
class ViewOcl implements View.OnClickListener {
String wsdlURL;
String webMethod;
String namespace;
String soapAction;
SoapObject soapObject;
SoapSerializationEnvelope envelope;
HttpTransportSE se;
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnAddUser:
User u = new User();
//u.setUid(1);
u.setUsername("罗逸");
u.setPassword("233456");
// 步骤1:设置调用Web Service的参数
wsdlURL = "http://172.31.147.20:8080/CloudService/services/UserService";
webMethod = "add";
namespace = "http://services.chinasoft.com";
soapAction = namespace + webMethod;
// 步骤2:创建一个SoapObject对象,信封中的信内容
soapObject = new SoapObject(namespace, webMethod);
// 步骤3:传递参数 ,添加user对象到信封,
// user应该与 Web Services Explorer页面中add方法要传递的对象名称保持相同
soapObject.addProperty("user", u);
// 步骤4:创建一个SoapSerializationEnvelope,信封:设定信封传递方式
envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
//核心重点:指定服务器端的反序列化类对象,
//namespace和name都需要到WebService的XML文件中查找,clazz:指定要序列化的类对象
envelope.addMapping("http://po.chinasoft.com/xsd", "User", u.getClass());
// 步骤5:设置一下传回对象 将信装载到信封
envelope.bodyOut = soapObject;
// 步骤6:创建HttpTransportSE,用于传输数据,邮递员:将邮递地址给予邮递员
se = new HttpTransportSE(wsdlURL);
try {
// 步骤7:发送请求 送信
se.call(soapAction, envelope);
// 步骤8:获取从互联网返回的结果,测试信有没有送到
if (envelope.getResponse() != null) {
Object result = envelope.getResponse();
// 测试:显示结果
Toast.makeText(SoapClientActivity.this,
"结果为:" + result.toString(), Toast.LENGTH_LONG)
.show();
}
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
break;
最后不要忘记加包:mysql_jdbc和KSoap包,还有
最后在AndroidManifest.xml中添加:
<uses-permission android:name="android.permission.INTERNET"/>
分享到:
相关推荐
5. **Marshalling and Unmarshalling**: 这是kSOAP2处理的对象序列化和反序列化过程。Marshalling是将Java对象转换为SOAP格式,Unmarshalling则是将接收到的SOAP消息解析回Java对象。 6. **Transport**: kSOAP2使用...
- **对象序列化和反序列化**:Ksoap2能将Java对象转换为SOAP消息,同时也能解析SOAP响应并还原为Java对象,这极大地简化了客户端和服务端的数据交换。 - **支持各种数据类型**:包括基本类型如字符串、整数、浮点数...
KSOAP2是一个轻量级的开源库,专为Android设计,用于处理SOAP(简单对象访问协议)消息,从而与基于Web Service的服务进行通信。本篇将详细介绍Android KSOAP2 3.6版本在Webservice中的应用及关键知识点。 1. **...
本示例“android webservice 对象序列化例子”关注的就是如何在Android应用中处理这一过程。 **对象序列化** 是将Java对象转换为可以存储或传输的数据格式的过程。在Android中,这通常是将对象转换为XML或JSON字符...
在Android中,ksoap2-android库是用于调用SOAP(Simple Object Access Protocol)Web Service的首选工具。本篇将详细介绍如何利用ksoap2-android-3.6.4库在Android应用中调用Web Service。 首先,我们需要理解SOAP...
本示例将详细介绍如何在Android中利用ksoap2库进行WebService网络通信。 首先,我们要理解SOAP(Simple Object Access Protocol),它是一种基于XML的协议,用于在Web上交换结构化的和类型化的信息。ksoap2则提供了...
### KSOAP2序列化复杂参数 #### 概述 在Android开发过程中,处理与Web服务交互的任务时常需要用到KSOAP2库。KSOAP2是用于Android平台的一个轻量级SOAP库,它提供了简单的方法来发送SOAP请求和解析SOAP响应。本文将...
3. **数据绑定**:kSOAP2支持将Java对象序列化为SOAP数据,以及将接收到的SOAP数据反序列化为Java对象,简化了数据交换的过程。 4. **错误处理**:kSOAP2提供了处理网络和解析错误的机制,帮助开发者调试和解决通信...
对象序列化是将Java对象转换为可以在网络上传输的格式(如XML或JSON)的过程,而反序列化则是将接收到的数据还原为对象。在这个项目中,我们将探讨如何在Android中实现对WebService的调用,并涉及对象序列化。 首先...
Android KSOAP2 API Chm版
在这个场景下,Web Service技术就显得尤为重要,而Ksoap2是Android平台上一个常用的SOAP(Simple Object Access Protocol)客户端库,用于处理XML格式的Web服务。本教程将深入讲解如何使用Android的ViewPager组件,...
在Android平台调用Web Service需要依赖于第三方类库ksoap2,它是一个SOAP Web service客户端开发包。此jar包用于android和webservice进行通信,目前版本3.6.2
KSOAP2是一个轻量级的库,专门用于Android平台,它使得Android应用能够通过SOAP协议调用远程Web服务。本篇文章将深入探讨如何在Android中利用KSOAP2库来访问和使用WebService。 1. **SOAP与KSOAP2简介** SOAP...
《ksoap2-android-2.5.4.jar.zip:Android Web服务开发的得力助手》 在移动应用开发中,Android平台与Web服务的交互是一个常见的需求,这通常涉及到数据的远程获取、更新或者同步。ksoap2-android库是解决这一问题...
本文将深入探讨ksoap2-android的两个版本——ksoap2-android-assembly-2.4-jar和ksoap2-android-assembly-2.5.2-jar,以及它们如何帮助开发者实现这一功能。 首先,ksoap2-android是一个开源项目,它提供了Android...
在Android开发中,有时我们需要与基于SOAP的Web服务进行交互,Ksoap2是一个流行的库,用于处理这种通信。本文将深入探讨如何使用Ksoap2在Android客户端实现与使用Apache CXF和WSS4J安全框架的Web服务的认证过程。 *...
3. **数据序列化和反序列化**:ksoap2能够将Java对象转换为SOAP消息中的XML数据,反之亦然,实现了数据的自动序列化和反序列化。 4. **错误处理**:ksoap2提供了对Web服务调用中可能出现的错误进行捕获和处理的能力...
ksoap2-android-assembly-3.0.0-jar-with-dependencies.jar
3. **数据类型支持**:kSOAP2能够序列化和反序列化多种数据类型,包括基本类型(如int、String)、自定义对象和数组。这得益于其强大的` PropertyInfo`类,可以定义参数类型、名称和方向。 4. **错误处理**:在调用...