关于项目的备忘——服务器的数据交互

作者: JUNE言JUNE语 | 来源:发表于2016-06-13 11:59 被阅读498次

    最近做了一个二手市场的学习项目,是一个安卓的app。其中与服务器交互主要是我在做,因为是学习项目,其中我尝试了三种数据交互的方式。

    一、直接DateOutputStream的writeUTF,writeInt等方法

    HttpURLConnection connection = ConnectServer.getConnection("mainServlet");
    DataOutputStream outobj = new DataOutputStream(
            connection.getOutputStream());
    outobj.writeInt(1);//获取commodity
    //需要向服务器发多少次,服务器就对应read多少次就可以
    outobj.writeUTF("hahahahah");
    outobj.flush();
    outobj.close();
    

    这种方法简单明了,但是遇到复杂的数据类型,传输起来就比较麻烦

    二、通过定义实体类,实现序列化接口。

    public class User implements Serializable {
        
        private String username;
        private String password;
        private String identity;
    }
    

    这种方法需要在服务器以及客户端同时定义两个一模一样的实体类,否则会报错。同时最好实现序列化接口,这样可以将基本数据类型转换成字节表示。
    这种方法首先需要定义两个一模一样的实体类,同时一旦你的实体类有任何的增删都需要同时做出更新。

    三、List,Map,Set等容器+json

    java本身的数据容器是非常强大的,特别是Map,可用范围广。json则被公认是传输数据最好的格式之一。
    该方法只需要在客户端新建一个map,将数据put进去,然后通过Gson将数据转换成json类型的数据,即String类型。然后使用第一种方法把数据发给服务器,在服务直接解析json类型的String数据,在转换成Map类型。

    //客户端:
    Map<String,String> data = new HashMap<String,String>();
    data.put("username", application.getUsername());
    data.put("headPic", application.getUsername()+".jpg");
    data.put("method", method);
    data.put("pro_class", pro_class);
    data.put("commodityPic", picName);
    data.put("title", title.getText().toString());
    data.put("desc", desc.getText().toString());
    data.put("price", price.getText().toString());
    Gson gson = new Gson();
    String test =gson.toJson(data);
    //将test发送给服务器,再由服务器解析成Map即可
    
    //模拟在服务器解析
    data = new HashMap<String,String>();
    //转换成Map类型的数据
    data = gson.fromJson(test,Map.class);
    

    这种方法非常方便快捷,只需要服务器跟客户端统一对map操作的key值即可。
    不过使用map的时候,因为一般情况下值的类型我会使用Object,如果是把一个int put进map,系统则会将int转化成Double类型,这时候就有点麻烦了(其实也没有什么麻烦的,Double型的数据跟int的区别就是会有尾数,比如1跟1.0,如果只是直接显示,还是需要转化),但是如果将int先转成String类型,再保存则不会有这样的问题。需要用到int的时候,只需要

    int num = Integer.parseInt(str);
    

    相关文章

      网友评论

        本文标题:关于项目的备忘——服务器的数据交互

        本文链接:https://www.haomeiwen.com/subject/nhdydttx.html