?? httphandler.java
字號:
/*
* HttpHandler.java
*
* Created on 2006年5月22日, 下午7:58
*
* To change this template, choose Tools | Options and locate the template under
* the Source Creation and Management node. Right-click the template and choose
* Open. You can then make changes to the template in the Source Editor.
*/
package cn.edu.uestc.pandawireless.model;
import java.lang.Thread;
import javax.microedition.io.*;
import java.io.*;
import cn.edu.uestc.pandawireless.ui.*;
import java.util.*;
import cn.edu.uestc.pandawireless.ui.table.*;
/**
*
* @author pandaxiaoxi
*/
public class HttpHandler extends Thread{
private String serverURL = "";
private HttpConnection conn = null;
private UIControler uicontroler = null;
// private byte[] requestData = null;
//private byte[] responseData = null;
private boolean done = false;
private byte op ;
private Object[] objs;
private TableModel model;
private Table table;
public LoginSuccessUI lsUI;
public SearchResultUI srUI;
/** Creates a new instance of HttpHandler */
public HttpHandler(UIControler uicontroler) {
this.uicontroler = uicontroler;
}
public void setURL(String url){
this.serverURL = url;
}
// public void setRequestData(byte[] data){
// this.requestData = data;
// }
// public byte[] getResponseData(){
// return responseData;
// }
public void setOP(byte op){
this.op = op;
}
public void setObjects(Object[] objs){
this.objs = objs;
}
public void stop(){
done = true;
}
public void run(){
while(!done){
//線程啟動進入等待狀態
synchronized (uicontroler) {
try {
uicontroler.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if(!done){
try{
//建立HttpConnection連接
conn = (HttpConnection)Connector.open(serverURL,Connector.READ_WRITE, true);
//midlet.setCurrent(progress);
uicontroler.displayProgress();
//System.out.println(conn.toString());
//conn.setRequestProperty("X-Online-Host", "218.194.34.156");
conn.setRequestProperty("User-Agent",System.getProperty("microedition.profiles"));
uicontroler.progressUI.append("\n設置User-Agent:"+System.getProperty("microedition.profiles"));
conn.setRequestProperty("Content-Type","application/octet-stream");
uicontroler.progressUI.append("\n設置Content-Type:application/octet-stream");
conn.setRequestMethod(HttpConnection.POST);
uicontroler.progressUI.append("\n設置請求方式:POST");
uicontroler.progressUI.append("\n開始發送請求數據...");
DataOutputStream dos = conn.openDataOutputStream();
dos.writeByte(this.op);
int size = objs.length;
for (int i=0;i<size;i++){
dos.writeUTF((String)objs[i]);
}
//dos.write(this.requestData);
dos.close();
//判斷返回的HTTP響應碼 200表示連接成功
int responseCode = conn.getResponseCode();
if(responseCode != HttpConnection.HTTP_OK){
uicontroler.displayError("連接服務器時發生錯誤!"+responseCode);
return;
}
DataInputStream dis = conn.openDataInputStream();
byte returnCode = dis.readByte();
//dis.close();
//conn.close();
switch (returnCode) {
case OperateConstants.CHANGEPWD_SUCCESS:
{
uicontroler.displaySuccess("恭喜你,修改密碼成功!");
break;
}
case OperateConstants.CHANGEPWD_FAIL:
{
uicontroler.displayError("修改密碼失?。?quot;);
break;
}
case OperateConstants.CHANGEPWD_ERROR_PWD:
{
uicontroler.displayError("輸入的密碼錯誤,請重新輸入!");
break;
}
case OperateConstants.CHANGEPWD_NO_USER:
{
uicontroler.displayError("沒有此用戶,請重新輸入!");
break;
}
case OperateConstants.LOGIN_ERROR_PWD:
{
uicontroler.displayErrorforLogin("輸入的密碼錯誤,請重新輸入!");
break;
}
case OperateConstants.LOGIN_NO_USER:
{
uicontroler.displayErrorforLogin("沒有此用戶,請重新輸入!");
break;
}
case OperateConstants.LOGIN_SUCCESS_NO_BOOK:
{
uicontroler.handleEvent(UIControler.EventID.LOGIN_SUCCESS_NO_BOOK);
break;
}
case OperateConstants.LOGIN_SUCCESS_HAS_BOOK:
{
int count = dis.readInt();
uicontroler.progressUI.append("\n登陸成功了,你當前借了"+count+"本書!\n稍后就可以看見你都借了哪些書了!\n耐心等待哦...");
try
{
Thread.sleep(3000);
}catch(Exception ex){
}
Vector borrows = new Vector();
String[] borrow = null;
for(int i=0;i<count;i++){
borrow = new String[3];
for(int j=0;j<borrow.length;j++){
borrow[j] = dis.readUTF();
}
borrows.addElement(borrow);
}
model = new BorrowModel(borrows);
table = new Table(model);
//uicontroler.handleEvent(UIControler.EventID.SHOW_USER_BOOKS,table);
lsUI = new LoginSuccessUI(uicontroler,table);
uicontroler.libmidlet.setCurrent(lsUI);
break;
}
case OperateConstants.SEARCH_NO_BOOK:
{
uicontroler.displayErrorforSearch("對不起,沒有您要查找的書籍,請重新查詢!");
break;
}
case OperateConstants.SEARCH_HAS_BOOK:
{
int count = dis.readInt();
uicontroler.progressUI.append("\n一共為你找到了"+count+"本匹配的書!\n稍后就可以看見這些書了!\n耐心等待哦...");
try
{
Thread.sleep(3000);
}catch(Exception ex){
}
Vector books = new Vector();
String[] book = null;
for(int j=0;j<count;j++){
book = new String[7]; //書的屬性個數,可以查看服務器端的BookBean
for(int n=0;n<book.length;n++){
book[n] = dis.readUTF();
//System.out.println(book[n]);
}
books.addElement(book);
}
/***********************************************************************************/
/*****下面代碼用于測試Table是否可用,正式版本不包括下面代碼******************************/
/***********************************************************************************/
// TableModel model = new BookModel(books);
// Table table = new Table(model);
// uicontroler.libmidlet.setCurrent(new ScrollPane(table));
model = new BookModel(books);
table = new Table(model);
srUI = new SearchResultUI(uicontroler,table);
uicontroler.libmidlet.setCurrent(srUI);
break;
}
}
dis.close();
conn.close();
}catch(IOException ee){
switch(this.op){
case OperateConstants.LOGIN:
{
uicontroler.displayErrorforLogin("發生IO異常!");
break;
}
case OperateConstants.SEARCH_BOOK:
{
uicontroler.displayErrorforSearch("發生IO異常!");
break;
}
case OperateConstants.CHANGE_PWD:
{
uicontroler.displayError("發生IO異常!");
break;
}
}
}
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -