以下のコードを使用して、Web サービスからの URL から画像を表示しています。エラーは発生していませんが、画像を表示することもできません。
getWebData は、私の Utils クラスの静的メソッドです。
public static void getWebData(final String url, final WebDataCallback callback) throws IOException
{
Thread t = new Thread(new Runnable()
{
public void run()
{
HttpConnection connection = null;
InputStream inputStream = null;
try
{
connection = (HttpConnection) Connector.open(url, Connector.READ, true);
inputStream = connection.openInputStream();
byte[] responseData = new byte[10000];
int length = 0;
StringBuffer 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());
}
});
}
finally
{
try
{
inputStream.close();
inputStream = null;
connection.close();
connection = null;
}
catch(Exception e){}
}
}
});
t.start();
}
getWebData メソッドを利用する WebBitmapField は以下のとおりです。コンストラクターに URL を渡すだけで、画像が読み込まれます。
public class WebBitmapField extends BitmapField implements WebDataCallback
{
private EncodedImage bitmap = null;
public WebBitmapField(String url)
{
try
{
Util.getWebData(url, this);
}
catch (Exception e) {}
}
public Bitmap getBitmap()
{
if (bitmap == null) return null;
return bitmap.getBitmap();
}
public void callback(final String data)
{
if (data.startsWith("Exception")) return;
try
{
byte[] dataArray = data.getBytes();
bitmap = EncodedImage.createEncodedImage(dataArray, 0,
dataArray.length);
setImage(bitmap);
}
catch (final Exception e){}
}
}