开发工具及环境:
Eclipse、SQL Server、JDK、JRE、Android SDK、ADT;
前期工作准备:
1.搭配Java开发环境;
2.配置Android开发环境;
3.在Eclipse里安装ADT插件;
开发的个人健康记录系统是个什么样子呢?A(病人)通过客户端将个人健康数据发送给服务器端上的B(医生),B查看信息后及时反馈一些医疗建议给A;在发送数据的同时,服务器将数据存入SQL数据库;客户端与JSP网站都可以对数据库进行操作。
1.客户端布局:
布局比较简单,整体用的ScrollView滚动视图来显示全部内容,除去文字用的TextView,剩下的是Button以一定间隔排列;Button左右都是图片,中间是文字。
用户点击不同的Button出现的窗口也不同,点击Filter时进行数据库内容筛选,可以选择显示一条记录里的某几项数据或者选择某个时段内的个人健康记录。
响应点击事件的代码如下:
suggest7.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View arg0) { // get prompts.xml view LayoutInflater li = LayoutInflater.from(context); View promptsView = li.inflate(R.layout.prompts6, null); AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder( context); // set prompts.xml to alertdialog builder alertDialogBuilder.setView(promptsView); final EditText userInput = (EditText) promptsView .findViewById(R.id.editTextDialogUserInput); // set dialog message alertDialogBuilder .setCancelable(false) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog,int id) { // get user input and set it to result // edit text ed07_msg.setText(userInput.getText()); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog,int id) { dialog.cancel(); } }); // create alert dialog AlertDialog alertDialog = alertDialogBuilder.create(); // show it alertDialog.show(); } });
服务器网站:
网站布局上简单用了表格显示数据库查询的数据,数据筛选用了个时间控件;我的服务器代码与JSP网站是用的Eclipse的WEB项目完成的,servlet里写服务器代码,当访问网站时,根据URL-pattern映射关系调用servlet执行服务器代码;SQL数据库操作在JSP网页里(使用了JDBC,百度一下,数据库操作代码很简单的)。
Scoket通信:
Android 4.0之后,socket通信不能放在主线程中,需要新开一个子线程;
private Thread getThread = new Thread(){ @Override public void run() { try { socket = new Socket(HOST, PORT); in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8")); out = new PrintWriter(new BufferedWriter(new OutputStreamWriter( socket.getOutputStream(),"UTF-8")), true); while(true){ content=in.readLine();//一直接收socket通信数据 } } catch (IOException ex) { ex.printStackTrace(); ShowDialog("login exception" + ex.getMessage()); } }; };
多线程技术:
开一个线程池,当一个手机客户端与服务器端连接时,将用户添加进链表存储并放入线程池;如此便实现一个服务器对应多个客户端进行socket通信,将用户存入链表也可以方便服务器对每个客户端进行遍历。
public void init() throws ServletException { new Thread() { public void run() { try { ServerSocket server = new ServerSocket(1245); mExecutorService = Executors.newCachedThreadPool(); //线程池 Socket socket = null; while (true) { socket = server.accept(); SocketServer.mList.add(socket); mExecutorService.execute(new SocketServer(socket)); } } catch (IOException ex) { System.out.println(ex.getMessage()); } } }.start(); }
发送与接收数据上的处理:
//发送 String msg = ed01_msg.getText().toString() +"@" + ed02_msg.getText().toString() +"@" + ed03_msg.getText().toString() +"@" + ed04_msg.getText().toString() +"@" + ed05_msg.getText().toString() +"@" + ed06_msg.getText().toString() +"@" + ed07_msg.getText().toString() +"@" + ed001_msg.getText().toString() +"@" + ed002_msg.getText().toString() +"@" + ed003_msg.getText().toString() +"@" + ed004_msg.getText().toString(); //接收 while(true) { if((msg = in.readLine())!= null) { date =SocketServer.msg.split("@",11); msg1=date[0]; msg2=date[1]; msg3=date[2]; msg4=date[3]; msg5=date[4]; msg6=date[5]; msg7=date[6]; msg01=date[7]; msg02=date[8]; msg03=date[9]; msg04=date[10]; }
至此,简单的个人健康记录系统的基本流程叙述完了;这是我第一次写博客,写的不好请多多见谅;我的程序表达能力不是很好,希望通过写博客来慢慢加强自己的表达能力!