`
king_tt
  • 浏览: 2190396 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android KSOAP2完成3种对象序列化网络传输(POJO)

 
阅读更多

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"/>

分享到:
评论

相关推荐

    Android_Ksoap2

    - **对象序列化和反序列化**:Ksoap2能将Java对象转换为SOAP消息,同时也能解析SOAP响应并还原为Java对象,这极大地简化了客户端和服务端的数据交换。 - **支持各种数据类型**:包括基本类型如字符串、整数、浮点数...

    ksoap2-android3.6.2

    5. **Marshalling and Unmarshalling**: 这是kSOAP2处理的对象序列化和反序列化过程。Marshalling是将Java对象转换为SOAP格式,Unmarshalling则是将接收到的SOAP消息解析回Java对象。 6. **Transport**: kSOAP2使用...

    android ksoap2 3.6 webservice专用

    KSOAP2是一个轻量级的开源库,专为Android设计,用于处理SOAP(简单对象访问协议)消息,从而与基于Web Service的服务进行通信。本篇将详细介绍Android KSOAP2 3.6版本在Webservice中的应用及关键知识点。 1. **...

    android webservice 对象序列化例子

    本示例“android webservice 对象序列化例子”关注的就是如何在Android应用中处理这一过程。 **对象序列化** 是将Java对象转换为可以存储或传输的数据格式的过程。在Android中,这通常是将对象转换为XML或JSON字符...

    Android通过ksoap2进行WebService网络通信demo

    本示例将详细介绍如何在Android中利用ksoap2库进行WebService网络通信。 首先,我们要理解SOAP(Simple Object Access Protocol),它是一种基于XML的协议,用于在Web上交换结构化的和类型化的信息。ksoap2则提供了...

    ksoap2-android-3.6.4.zip

    在Android中,ksoap2-android库是用于调用SOAP(Simple Object Access Protocol)Web Service的首选工具。本篇将详细介绍如何利用ksoap2-android-3.6.4库在Android应用中调用Web Service。 首先,我们需要理解SOAP...

    KSOAP2序列化复杂参数

    ### KSOAP2序列化复杂参数 #### 概述 在Android开发过程中,处理与Web服务交互的任务时常需要用到KSOAP2库。KSOAP2是用于Android平台的一个轻量级SOAP库,它提供了简单的方法来发送SOAP请求和解析SOAP响应。本文将...

    ksoap2源码

    3. **数据绑定**:kSOAP2支持将Java对象序列化为SOAP数据,以及将接收到的SOAP数据反序列化为Java对象,简化了数据交换的过程。 4. **错误处理**:kSOAP2提供了处理网络和解析错误的机制,帮助开发者调试和解决通信...

    android调用webservice 的对象序列化代码

    对象序列化是将Java对象转换为可以在网络上传输的格式(如XML或JSON)的过程,而反序列化则是将接收到的数据还原为对象。在这个项目中,我们将探讨如何在Android中实现对WebService的调用,并涉及对象序列化。 首先...

    Android KSOAP2 API Chm版

    Android KSOAP2 API Chm版

    ksoap2-android-assembly-3.6.2-jar 下载

    在Android平台调用Web Service需要依赖于第三方类库ksoap2,它是一个SOAP Web service客户端开发包。此jar包用于android和webservice进行通信,目前版本3.6.2

    android-Ksoap2简单天气预报查询

    在这个场景下,Web Service技术就显得尤为重要,而Ksoap2是Android平台上一个常用的SOAP(Simple Object Access Protocol)客户端库,用于处理XML格式的Web服务。本教程将深入讲解如何使用Android的ViewPager组件,...

    Android 采用KSOAP2方式访问WebService

    KSOAP2是一个轻量级的库,专门用于Android平台,它使得Android应用能够通过SOAP协议调用远程Web服务。本篇文章将深入探讨如何在Android中利用KSOAP2库来访问和使用WebService。 1. **SOAP与KSOAP2简介** SOAP...

    ksoap2-android-2.54.jar.zip

    《ksoap2-android-2.5.4.jar.zip:Android Web服务开发的得力助手》 在移动应用开发中,Android平台与Web服务的交互是一个常见的需求,这通常涉及到数据的远程获取、更新或者同步。ksoap2-android库是解决这一问题...

    ksoap2-android-assembly-2.4-jar与ksoap2-android-assembly-2.5.2-jar

    本文将深入探讨ksoap2-android的两个版本——ksoap2-android-assembly-2.4-jar和ksoap2-android-assembly-2.5.2-jar,以及它们如何帮助开发者实现这一功能。 首先,ksoap2-android是一个开源项目,它提供了Android...

    android_ksoap2_cxf_wss4j_authentication

    在Android开发中,有时我们需要与基于SOAP的Web服务进行交互,Ksoap2是一个流行的库,用于处理这种通信。本文将深入探讨如何使用Ksoap2在Android客户端实现与使用Apache CXF和WSS4J安全框架的Web服务的认证过程。 *...

    ksoap2-android-assembly-3.6.2-jar-with-dependencies

    3. **数据序列化和反序列化**:ksoap2能够将Java对象转换为SOAP消息中的XML数据,反之亦然,实现了数据的自动序列化和反序列化。 4. **错误处理**:ksoap2提供了对Web服务调用中可能出现的错误进行捕获和处理的能力...

    ksoap2-android

    ksoap2-android-assembly-3.0.0-jar-with-dependencies.jar

    ksoap2-android-assembly-2.4-jar-with-dependencies

    3. **数据类型支持**:kSOAP2能够序列化和反序列化多种数据类型,包括基本类型(如int、String)、自定义对象和数组。这得益于其强大的` PropertyInfo`类,可以定义参数类型、名称和方向。 4. **错误处理**:在调用...

Global site tag (gtag.js) - Google Analytics