0

URLから画像を読み込んでリストフィールドで再生できません

ImageLoaderクラス

public class Util_ImageLoader {
    public static Bitmap getImageFromUrl(String url) {
        Bitmap bitmap = null;

        try {
            String bitmapData = getDataFromUrl(url);
            bitmap = Bitmap.createBitmapFromBytes(bitmapData.getBytes(), 0,
                    bitmapData.length(), 1);
        } catch (Exception e1) {
            e1.printStackTrace();
        }

        return bitmap;
    }

    private static String getDataFromUrl(String url) {
        StringBuffer b = new StringBuffer();
        InputStream is = null;
        HttpConnection c = null;

        long len = 0;
        int ch = 0;

        try {
            c = (HttpConnection) Connector.open(url);

            is = c.openInputStream();
            len = c.getLength();
            if (len != -1) {
                for (int i = 0; i < len; i++)
                    if ((ch = is.read()) != -1) {
                        b.append((char) ch);
                    }
            } else {
                while ((ch = is.read()) != -1) {
                    len = is.available();
                    b.append((char) ch);
                }
            }

            is.close();
            c.close();

        } catch (IOException e) {
            e.printStackTrace();
        }

        return b.toString();
    }
}

ListFieldクラス

image = new BitmapField(Util_ImageLoader.getImageFromUrl(
    "http://www.orientaldaily.com.my/images/articles/4_APRIL_BLACK_copy.jpg"),
    Field.FIELD_HCENTER | Field.FIELD_VCENTER);
row.add(image);
field = getField(3);
layoutChild(field, 100, 80);
setPositionChild(field, getPreferredWidth() - 105, 5);
4

2 に答える 2

1

アランは、OS5.0以降をサポートするだけでよいと言ったと思います。それが本当なら、私は彼がのような接続拡張文字列をわざわざ構築することをお勧めしません";interface=wifi"

OS 5.0はConnectionFactoryクラスを追加しました。これにより、これがはるかに簡単になります。

BlackBerryデバイスは、さまざまなネットワークトランスポートのいずれかを使用してネットワーク要求を行うことができます。一部のアプリは、どのトランスポートが使用されるかを気にします。他のアプリは、利用可能なトランスポートが必要なだけです。

を使用して最初に使用可能なトランスポートConnectionFactory作成する例については、この例を参照してください。Connection

を使用して、最初に使用するトランスポートのリストと、まったく使用しないトランスポートのリストConnectionFactoryを指定することを示す、より高度な例については、この例を参照してください。

2番目の例では、コードはBrowserFieldAlanが使用していないを使用しています。しかし、彼は自分のコードを置き換えることができます

c = (HttpConnection) Connector.open(url);

これとともに

c = (HttpConnection) MyConnectionFactory.getConnection(url).getConnection();

ここで、MyConnectionFactoryサンプルコードに示されています

于 2012-06-30T09:44:41.383 に答える
0

URLに接続拡張機能を追加する必要があります。

Wi-Fiの場合のように";interface = wifi"

Example: c = (HttpConnection) Connector.open(url+";interface=wifi");

完璧な接続パラメータを使用

c = (HttpConnection) Connector.open(url+getConnParam());

接続拡張を取得するためのコードサンプル:

public static String getConnParam(){
        String connectionParameters = "";
        if (WLANInfo.getWLANState() == WLANInfo.WLAN_STATE_CONNECTED) {
        // Connected to a WiFi access point
        connectionParameters = ";interface=wifi";
        } else {
        int coverageStatus = CoverageInfo.getCoverageStatus();
        ServiceRecord record = getWAP2ServiceRecord();
        if (record != null
        && (coverageStatus & CoverageInfo.COVERAGE_DIRECT) ==
        CoverageInfo.COVERAGE_DIRECT) {
        // Have network coverage and a WAP 2.0 service book record
        connectionParameters = ";deviceside=true;ConnectionUID="
        + record.getUid();
        } else if ((coverageStatus & CoverageInfo.COVERAGE_MDS) ==
        CoverageInfo.COVERAGE_MDS) {
        // Have an MDS service book and network coverage
        connectionParameters = ";deviceside=false";
        } else if ((coverageStatus & CoverageInfo.COVERAGE_DIRECT) ==
        CoverageInfo.COVERAGE_DIRECT) {
        // Have network coverage but no WAP 2.0 service book record
        connectionParameters = ";deviceside=true";
        }

    }
        return connectionParameters;
    }

参照URL:

http://www.blackberry.com/developers/docs/4.6.0api/javax/microedition/io/Connector.html#http

http://www.blackberry.com/knowledgecenterpublic/livelink.exe/fetch/2000/348583/800451/800563/What_Is_-_Different_ways_to_make_an_HTTP_or_socket_connection.html?nodeid=826935&vernum=0

于 2012-06-29T08:27:20.263 に答える