1. J2ME
// 方法1
Connector conn = Connector.open(url, Connector.READ_WRITE, true);
InputStream is = ((HttpConnection) conn).openInputStream();
Image img = Image.createImage(is);
// 方法2
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] bytes = new byte[128];
int size = 0, totalSize = 0;
HttpConnection conn = (HttpConnection) Connector.open(url, Connector.READ_WRITE, true);
InputStream is = conn.openInputStream();
try {
while ((size = is.read(bytes)) != -1) {
baos.write(bytes, 0, size);
totalSize += size;
}
} catch (IOException e) {
System.out.println("IOEx = " + e.toString());
}
Image img = Image.createImage(baos.toByteArray(), 0, totalSize);
bytes = null;
2. Android
// 方法1
public class MapAppl extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new mapView(this));
}
private class mapView extends View {
public mapView(Context context) {
super(context);
}
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Bitmap bm = null;
try {
InputStream is = getInputStream("http://www.tiexin.com/images/map_blocks/1/4/3/3/00000037_00000031.png");
bm = BitmapFactory.decodeStream(is);
if (is != null) {
is.close();
is = null;
}
} catch (IOException e) {
e.printStackTrace();
}
Paint p = new Paint();
canvas.drawBitmap(bm, 40, 40, p);
}
private InputStream getInputStream(String strURL) throws IOException {
URL url = new URL(strURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setConnectTimeout(1000);
conn.setRequestMethod("GET");
conn.connect();
for (int i = 0; i < 5; i++) { // 连接5次
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
InputStream is = conn.getInputStream();
if (conn != null) {
// conn.disconnect(); // 在未对is进行处理前,不能conn.disconnect()
conn = null;
}
return is;
}
}
return null;
}
}
}
// 方法2
public class MapAppl2 extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new mapView(this));
}
private class mapView extends View {
public mapView(Context context) {
super(context);
}
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Bitmap bm = null;
try {
bm = getImage("http://www.tiexin.com/images/map_blocks/1/4/3/3/00000037_00000033.png");
} catch (IOException e) {
e.printStackTrace();
}
Paint p = new Paint();
canvas.drawBitmap(bm, 40, 40, p);
}
public final Bitmap getImage(String strUrl) throws IOException {
Bitmap bm;
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(strUrl);
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream input= entity.getContent();
byte[] bitImage = new byte[1024*1024], data=new byte[256];
int totalSize = 0, size = 0;
while ((size = input.read(data)) != -1) {
System.arraycopy(data, 0, bitImage, totalSize, size);
totalSize += size;
}
bm = totalSize > 0 ? BitmapFactory.decodeByteArray(bitImage, 0, totalSize) : null;
} else {
bm = null;
}
// Do not feel like reading the response body
// Call abort on the request object
httpget.abort();
return bm;
}
}
}
一般建议使用HttpClient进行连接,因为在redirect的时候URL不管用。 此外,Http连接后,一定要判断返回的statusCode(ResponseCode)。