開發工具及環境:
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];
}
至此,簡單的個人健康記錄系統的基本流程敘述完了;這是我第一次寫博客,寫的不好請多多見諒;我的程序表達能力不是很好,希望通過寫博客來慢慢加強自己的表達能力!