在进行android程序开发时,有需求将服务器(PC)的数据库数据在android客户端显示,通过网络或Socket进行数据的传输,一般的SOCKET数据传输都是以流媒体进行传输,一把从服务器查询的数据类型经过面向对象的封装成Object,所以,一般都将数据转换成JSON或者XML进行传输,android程序进行解析显示,但也可以通过ObjectInputStream,ObjectOutputStream通过Socket传输,下面为代码:
数据的封装类:Student.java
package Test;
import java.io.Serializable;
public class Student implements Serializable {//实现序列化接口...必须
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return id + "=" + name;
}
}
package Test;
import java.io.Serializable;
import java.util.List;
public class ListTest implements Serializable {//实现序列化接口...必须
private List<Student> list;
public List<Student> getList() {
return list;
}
public void setList(List<Student> list) {
this.list = list;
}
}
下面是简单的Socket传输测试:
服务端:
package Test;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class Server extends Thread {
private ServerSocket server;
private Socket socket;
public Server(){
try {
server = new ServerSocket(9000);
socket = server.accept();
} catch (Exception e) {
System.out.println("start error");
}
}
@Override
public void run() {
try {
Student stu = new Student();
stu.setId(1);
stu.setName("name1");
Student stu1 = new Student();
stu1.setId(1);
stu1.setName("name2");
List<Student> list = new ArrayList<Student>();
list.add(stu);
list.add(stu1);
ListTest test = new ListTest();
test.setList(list);
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
out.writeObject(test);
out.flush();
out.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new Server().start();
}
}
客户端:
package Test;
import java.io.ObjectInputStream;
import java.net.Socket;
import java.util.List;
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1",9000);
ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
//进行Object传输可以使用ObjectInputStream
ListTest test = (ListTest) in.readObject();
List<Student> list = test.getList();
for (Student student : list) {
System.out.println(student.getName());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
其中的两个封装类必须实现序列化接口!!!

本文介绍如何在Android应用中通过Socket从服务器接收并显示数据库数据。利用ObjectInputStream和ObjectOutputStream,直接传输实现了序列化接口的对象,如Student类,避免了JSON或XML的额外解析步骤。服务端和客户端的简单Socket通信示例代码包含在内。
3077





