📄 httphandler.java
字号:
package com.j2medev.ch5.image;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Image;
public class HttpHandler extends Thread {
private ImageMIDlet midlet = null;
private String URL = "";
private HttpConnection conn = null;
private InputStream is = null;
private boolean done = false;
private ProgressUI progress = null;
public HttpHandler(ImageMIDlet midlet) {
//HttpHandler保持一个ImageMIDlet的引用,方便回调。
this.midlet = midlet;
progress = new ProgressUI("联网等待");
progress.init();
}
public void setURL(String url){
this.URL = url;
}
public void stop(){
done = true;
}
public void run(){
while(!done){
//线程启动进入等待状态
synchronized (midlet) {
try {
midlet.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if(!done){
try{
//建立HttpConnection连接
conn = (HttpConnection)Connector.open(URL);
midlet.setCurrent(progress);
//判断返回的HTTP响应码 200表示连接成功
int code = conn.getResponseCode();
if(code != HttpConnection.HTTP_OK){
midlet.displayError("连接服务器错误,无法读取图片");
return;
}
int contentLength = (int)conn.getLength();
//打开输入流,准备读取图片
is = conn.openInputStream();
//在内存开辟一块空间用于存储图片
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//建立512k字节的缓冲区,读取图片
byte[] buffer = new byte[512];
int length = 0;
int read = 0;//记录已经读取的数据长度
while((length = is.read(buffer, 0, buffer.length)) != -1){
read = read + length;
progress.onProgress(read*100/contentLength);
baos.write(buffer, 0,length);
}
byte[] data = baos.toByteArray();
Image image = Image.createImage(data, 0, data.length);
//关闭连接
is.close();
conn.close();
//显示图片
midlet.setImage(image);
}catch(IOException ex){
midlet.displayError(ex.getMessage());
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -