📄 httpwaitform.java
字号:
/**
*
* @author Sam Huang
*
*/
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Gauge;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.StringItem;
/**
*
* 等待下载,监听并显示进度的Form类
*
*/
public class HttpWaitForm extends Form implements CommandListener,
IHttpListener {
private Gauge gauge;
private Command cancel;
private HttpThread httpThread;
private StringItem sizeString;
public HttpWaitForm(String url) {
super("请等待");
this.gauge = new Gauge("正在通讯...", false, 100, 0);
// System.out.println(this.gauge.isInteractive());
sizeString = new StringItem("剩余尺寸:", "未知");
this.cancel = new Command("返回", Command.CANCEL, 0);
// this.displayable = displayable;
append(this.sizeString);
append(this.gauge);
addCommand(cancel);
setCommandListener(this);
httpThread = new HttpThread(url, this);
httpThread.start();
}
public void commandAction(Command c, Displayable d) {
if (c == cancel) {
httpThread.setUserInterrupted();
ImageAlbum.getDisplay().setCurrent(ImageAlbum.getPreviousForm());
}
}
public void onFinish(byte[] buffer, int size) {
byte[] data = buffer;
if (size != buffer.length) {
data = new byte[size];
System.arraycopy(data, 0, buffer, 0, size);
}
try {
Image img = Image.createImage(data, 0, data.length);
//不为空,我们只需要把图片换一下,不需要重新初始化整个canvas
//要不然很容易造成内存溢出
if (ImageAlbum.scrollCanvas != null) {
ImageAlbum.scrollCanvas.setOriginalImage(img);
ImageAlbum.scrollCanvas.setImage(img);
} else {
ImageAlbum.scrollCanvas = new ScrollCanvas(img);
}
ImageAlbum.setCurrentForm(ImageAlbum.scrollCanvas);
ImageAlbum.getDisplay().setCurrent(ImageAlbum.scrollCanvas);
} catch (Exception ioe) {
ioe.printStackTrace();
} finally {
httpThread = null;
buffer = null;
data = null;
this.gauge = null;
}
}
public void onError(int code, String message) {
if (code == 404) {
// 这里还应该将currentUrl恢复为原来的第一张或者最后一张的图片的地址,省略
ImageAlbum.showAlert("已经达到第一张/最后一张图片.");
// 我的本意是想先显示警告信息,确定后直接显示原来的窗口,略去等待窗口
// 但是加上下边的代码后,在wtk模拟器里警告信息就被略去了
// 由于选择的屏幕导航方法过于简单,解决这个问题需要一些功夫,这里不想继续探讨这个问题
// ImageAlbum.getDisplay().setCurrent(ImageAlbum.getPreviousForm());
} else {
ImageAlbum.showAlert("错误代码:" + code + "\n错误信息:" + message);
}
}
public void onProgress(int percent) {
this.gauge.setValue(percent);
}
public void onSetSize(int size) {
this.sizeString.setText("" + size);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -