個人andriod實習小作品,個人聯網筆記本
個人聯網筆記本
個人信息:就讀於燕大本科軟件project專業 眼下大四;
本人博客:google搜索“cqs_2012”就可以;
個人愛好:酷愛數據結構和算法,希望將來從事算法工作為人民作出自己的貢獻;
編程語言:java ;
編程壞境:Windows 7 專業版 x64;
編程工具:jdk,eclipse,AVD;
制圖工具:office 2010 powerpoint;
硬件信息:7G-3 筆記本;
引言
個人第一部聯網andriod作品誕生,andriod生涯裏程碑的出現。
主要技術點
通信socket技術。使用多線程通信。
在socket使用中,使用一次打開一次,關閉一次,傳輸數據一去一回。
socket與應用程序主線程的切換;
對主線程進行枷鎖。數據傳送完後,在socket線程裏對主線程的喚醒,防止主線程沒有等待數據通信完成就開始運行。
對主線程設置鎖;
// 線程鎖(事實上就是定義一個全局變量,在myapplication(全局變量)中定義)
public static String loginThreadState = "off";
加鎖操作
MyApplication.loginThreadState =“off”;
// 推斷當前線程是否喚醒檢查鎖操作
while(MyApplication.loginThreadState.equals("off"));
開鎖以及喚醒操作
// 喚醒 login 進程
MyApplication.loginThreadState = "on";
MyApplication.loginThreadState.notify();
然後這樣就能夠實現通信了,而且能夠等待通信返回來的數據,然後去處理。
個人筆記server端socket實現
import java.net.*; import java.io.*; import java.text.SimpleDateFormat; import java.util.*; import DBData.DataApplication; import DBData.NoteBookClass; import DBData.User; import DBOperation.NoteDao; import DBOperation.UserDao; import DataChange.NoteChange; public class MyAppNoteBookInfor extends Thread { // 鏈接變量 private static int port; private static ServerSocket serverSocket ; static Socket server; private DataInputStream input; private DataOutputStream output; static { try { // 設置服務器端口 port = 8899; serverSocket = new ServerSocket(port); } catch(Exception e) { e.printStackTrace(); } } public MyAppNoteBookInfor()throws Exception { // 成功啟動 System.out.println("accept ready"); server = serverSocket.accept(); // 成功啟動 System.out.println("accept start"); // 獲取數據流 input = new DataInputStream(server.getInputStream()); output = new DataOutputStream(server.getOutputStream()); } // run 主函數 public void run() { try { // 接收數據 String commondData = getCommondData(); // 處理數據,並發送數據 if(commondData != null) selectCommond( commondData ); server.close(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } // 選擇函數 not over 數據處理 public void selectCommond(String data)throws Exception { // 接收數據。處理 String formatdata[] = data.split( DataApplication.commondGetDataStyle ); // 選擇操作命令 switch( Integer.parseInt(formatdata[0])) { // check case DataApplication.commond_check_user: { // 數據轉換 User user = new User(); user.setId( formatdata[1] ); user.setPwd( formatdata[2] ); // 數據處理 Boolean result = MyAppNoteBookServer.checkUser(user); // 轉換格式 String senddata = result.toString(); // 發送數據 sendData(senddata); } break; // select-all case DataApplication.commond_get_my_all_note: { // 數據處理 String userid = formatdata[1]; ArrayList<NoteBookClass> noteList = MyAppNoteBookServer.getUserNoteList(userid); String senddata = "null" ; if(noteList != null && noteList.size() > 0) // 數據轉換 senddata = NoteChange.noteListToStringWithSendForSelect(noteList); // 發送數據 sendData(senddata); } break; // new - note case DataApplication.commond_insert_note: { // 數據轉換 NoteBookClass noteBookClass = NoteChange.stringToNoteBookWithGetForInsert(formatdata[1]); // 數據處理 Integer result = MyAppNoteBookServer.insertNote(noteBookClass); // 數據轉換 String senddata = result.toString(); // 數據發送 sendData(senddata); } break; // new user case DataApplication.commond_insert_user: { // 數據轉換 User user = new User(); user.toUser(formatdata[1]); // 數據處理 Integer result = MyAppNoteBookServer.insertUser(user); // 數據轉換 String senddata = result.toString(); // 數據發送 sendData(senddata); } break; case DataApplication.commond_search_note_by_key: { // 轉換數據 String[] keystStrings = NoteChange.dataToStringWithGetForSelectByKey(formatdata[1]); String useridString = keystStrings[0]; String keywordString =keystStrings[1]; // 數據處理 ArrayList<NoteBookClass> noteList = MyAppNoteBookServer.getUserNoteListByKeywords(useridString,keywordString); // 數據轉換 String senddata = "null" ; if(noteList != null && noteList.size() > 0) senddata = NoteChange.noteListToStringWithSendForSelect(noteList); // 發送數據 sendData(senddata); } break; case DataApplication.commond_alter_note: { // 轉換數據 NoteBookClass noteBookClass = NoteChange.stringToNoteBookWithGetForAlter( formatdata[1] ); // 數據處理 MyAppNoteBookServer.AlterNoteBook(noteBookClass); ArrayList<NoteBookClass> noteList = MyAppNoteBookServer.getUserNoteList(noteBookClass.getUserId()); String senddata = "null" ; if(noteList != null && noteList.size() > 0) // 數據轉換 senddata = NoteChange.noteListToStringWithSendForSelect(noteList); // 發送數據 sendData(senddata); } break; case DataApplication.commond_delete_note: { // 獲取並轉換數據 int id = Integer.parseInt(formatdata[1]); // 處理數據 int result = MyAppNoteBookServer.DeleteNoteBookById(id); // 轉換數據 String senddata = String.valueOf(result); // 發送數據 sendData(senddata); } break; } } // 發送信息函數 public void sendData(String data) { try { // 發送消息 output.writeUTF(data); output.flush(); } catch (Exception e) { e.printStackTrace(); } } // 接收命令函數 public String getCommondData() { String data = null; try { // 接收消息 data = input.readUTF(); } catch (Exception e) { // TODO: handle exception } return data; } // 主函數 main public static void main(String args[]) throws Exception { MyAppNoteBookInfor myAppNoteBookInfor; while(true) { myAppNoteBookInfor = new MyAppNoteBookInfor(); myAppNoteBookInfor.start(); } } }
個人clientsocket實現
package Thread; import java.io.DataInputStream; import java.io.DataOutputStream; import java.net.Socket; import com.icss.myappnotebook.MyApplication; public class SocektThread extends Thread { // 設置鏈接server private String ip = "120.6.72.65" ; private int port = 8899 ; // 鏈接客戶端程序 變量 private Socket clientSocket ; // 設置數據流 public DataInputStream input ; public DataOutputStream output ; // 線程主函數 public void run() { try { // 鏈接server clientSocket = new Socket(ip,port); // 獲取server輸入流 input = new DataInputStream(clientSocket.getInputStream()); // 獲取server輸入流 output = new DataOutputStream(clientSocket.getOutputStream()); switch (MyApplication.commond) { // check-核對username和password case MyApplication.commond_check_user: // 發送數據 2點 output.writeUTF(MyApplication.senddata); output.flush(); // 發送成功 System.out.println("send ok"); // 接收數據 MyApplication.getdata = input.readUTF(); // 喚醒 login 進程 MyApplication.loginThreadState = "on"; MyApplication.loginThreadState.notify(); break; // 獲得全部notes case MyApplication.commond_get_my_all_note: // 發送數據 2點 output.writeUTF(MyApplication.senddata); output.flush(); // 接收數據 MyApplication.getdata = input.readUTF(); // 喚醒 menu 線程 MyApplication.menuThreadState="on"; MyApplication.menuThreadState.notify(); break; case MyApplication.commond_insert_note: // 發送數據 output.writeUTF(MyApplication.senddata); output.flush(); // 接收數據 MyApplication.getdata = input.readUTF(); // 喚醒 new 線程 MyApplication.newNoteBookThreadState = "on"; MyApplication.newNoteBookThreadState.notify(); break; case MyApplication.commond_insert_user: // 發送數據 output.writeUTF(MyApplication.senddata); output.flush(); // 接收數據 MyApplication.getdata = input.readUTF(); // 喚醒 register 線程 MyApplication.registerUserThreadState = "on"; MyApplication.registerUserThreadState.notify(); break; case MyApplication.commond_search_note_by_key: // 發送數據 output.writeUTF(MyApplication.senddata); output.flush(); // 接收數據 MyApplication.getdata = input.readUTF(); // 喚醒 search 線程 MyApplication.searchNoteBookThreadState = "on"; MyApplication.searchNoteBookThreadState.notify(); break; case MyApplication.commond_alter_note: // 發送數據 output.writeUTF(MyApplication.senddata); output.flush(); // 接收數據 MyApplication.getdata = input.readUTF(); // 喚醒 show one notebook 線程 MyApplication.showOneNoteThreadState = "on"; MyApplication.showOneNoteThreadState.notify(); break; case MyApplication.commond_delete_note: // 發送數據 output.writeUTF(MyApplication.senddata); output.flush(); // 接收數據 MyApplication.getdata = input.readUTF(); // 喚醒 show one notebook 線程 MyApplication.openAllThreadState = "on"; MyApplication.openAllThreadState.notify(); break; default: break; } clientSocket.close(); } catch(Exception e) { e.printStackTrace(); } } }
希望對於想實現通信的好友有幫助,謝謝大家
個人andriod實習小作品,個人聯網筆記本