最近做了一个二手市场的学习项目,是一个安卓的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);
网友评论