Java 显示来自黑莓url的图像
这是我用来获取图片表单url的代码,但我得到的是Black屏幕,请帮助。 HttpConnection的代码:Java 显示来自黑莓url的图像,java,blackberry,Java,Blackberry,这是我用来获取图片表单url的代码,但我得到的是Black屏幕,请帮助。 HttpConnection的代码: StringBuffer raw = new StringBuffer(); HttpConnection _c = null; InputStream _is = null; try { _c = (HttpConnection)Connector.open(url); _c.getHeaderField("Locat
StringBuffer raw = new StringBuffer();
HttpConnection _c = null;
InputStream _is = null;
try
{
_c = (HttpConnection)Connector.open(url);
_c.getHeaderField("Location");
int rc = _c.getResponseCode();
if (rc != HttpConnection.HTTP_OK)
{
throw new IOException("HTTP response code: " + rc);
}
_is = _c.openInputStream();
_c.getType();
int len = (int)_c.getLength();
{
data = new byte[256];
int size = 0;
while ( -1 != (len = _is.read(data)) )
{
raw.append(new String(data, 0, len));
size += len;
}
String retVal = raw.toString();
// .alert(retVal);
return retVal+"URL is"+url;
}
}
catch (Exception e)
{
throw new IllegalArgumentException("Not an HTTP URL");
}
finally
{
if (_is != null)
_is.close();
if (_c != null)
_c.close();
}
从Perticular URL获取图像的代码:
public static Bitmap getImage(String url)
{
Bitmap bitmap;
EncodedImage bmp = EncodedImage.createEncodedImage(data, 0, data.length);
bitmap=bmp.getBitmap();
return bitmap;
}
我正在使用以下代码在主屏幕上显示图像:
Bitmap bt=HttpUtils.getImage("http://www.eng.chula.ac.th/files/building.jpg");
BitmapField bmp=new BitmapField(bt);
bmp.setBitmap(bt);
add(bmp);
请尝试以下代码-
URLBitmapField post_img= new URLBitmapField(image_url);
add(post_img);
import net.rim.device.api.math.Fixed32;
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.system.EncodedImage;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.BitmapField;
public class URLBitmapField extends BitmapField implements URLDataCallback {
EncodedImage result = null;
public static EncodedImage _encoded_img = null;
int _imgWidth = 52;
int _imgHeight = 62;
int _imgMargin = 10;
public URLBitmapField(String url) {
try {
http_image_data_extrator.getWebData(url, this);
}
catch (Exception e) {}
}
public Bitmap getBitmap() {
if (_encoded_img == null) return null;
return _encoded_img.getBitmap();
}
public void callback(final String data) {
if (data.startsWith("Exception")) return;
try {
byte[] dataArray = data.getBytes();
//bitmap = EncodedImage.createEncodedImage(dataArray, 0, dataArray.length);//no scale
_encoded_img = EncodedImage.createEncodedImage(dataArray, 0, dataArray.length); // with scale
_encoded_img = sizeImage(_encoded_img, _imgWidth, _imgHeight);
setImage(_encoded_img);
UiApplication.getUiApplication().getActiveScreen().invalidate();
}
catch (final Exception e){}
}
public EncodedImage sizeImage(EncodedImage image, int width, int height) {
int currentWidthFixed32 = Fixed32.toFP(image.getWidth());
int currentHeightFixed32 = Fixed32.toFP(image.getHeight());
int requiredWidthFixed32 = Fixed32.toFP(width);
int requiredHeightFixed32 = Fixed32.toFP(height);
int scaleXFixed32 = Fixed32.div(currentWidthFixed32,
requiredWidthFixed32);
int scaleYFixed32 = Fixed32.div(currentHeightFixed32,
requiredHeightFixed32);
result = image.scaleImage32(scaleXFixed32, scaleYFixed32);
return result;
}
}
public interface URLDataCallback {
public void callback(String data);
}
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import net.rim.device.api.system.RadioInfo;
import net.rim.device.api.system.WLANInfo;
import net.rim.device.api.ui.UiApplication;
public class http_image_data_extrator {
static String url_="";
static StringBuffer rawResponse=null;
//static String result = null;
public static void getWebData(String url, final URLDataCallback callback) throws IOException {
//url_=url;
HttpConnection connection = null;
InputStream inputStream = null;
try {
if ((WLANInfo.getWLANState() == WLANInfo.WLAN_STATE_CONNECTED)
&& RadioInfo
.areWAFsSupported(RadioInfo.WAF_WLAN)) {
url += ";interface=wifi";
}
connection = (HttpConnection) Connector.open(url, Connector.READ, true);
String location=connection.getHeaderField("location");
if(location!=null){
if ((WLANInfo.getWLANState() == WLANInfo.WLAN_STATE_CONNECTED)
&& RadioInfo
.areWAFsSupported(RadioInfo.WAF_WLAN)) {
location += ";interface=wifi";
}
connection = (HttpConnection) Connector.open(location, Connector.READ, true);
}else{
connection = (HttpConnection) Connector.open(url, Connector.READ, true);
}
inputStream = connection.openInputStream();
byte[] responseData = new byte[10000];
int length = 0;
rawResponse = new StringBuffer();
while (-1 != (length = inputStream.read(responseData))) {
rawResponse.append(new String(responseData, 0, length));
}
int responseCode = connection.getResponseCode();
if (responseCode != HttpConnection.HTTP_OK){
throw new IOException("HTTP response code: "+ responseCode);
}
final String result = rawResponse.toString();
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run(){
callback.callback(result);
}
});
}
catch (final Exception ex) {
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
callback.callback("Exception (" + ex.getClass() + "): " + ex.getMessage());
}
});
}
}
}
你能告诉我如何异步运行它吗?运行这行http\u image\u data\u extrator.getWebDataurl,这;在一个线程中以避免阻塞。Thanx我从url获取了图像。现在我将它们添加到列表字段。我希望当我运行应用程序时,我希望在滚动时获得图像的空白列表。。。