1

以下のコードを使用して、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){}
    }
}
4

0 に答える 0