2012-06-29 2 views
0

я не могу загрузить изображение из URL и играть в мою ListFieldНевозможно загрузить изображение из 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); 
+0

Вы используете отладчик? Любые исключения? Какую минимальную версию ОС BlackBerry вы строите для (OS 5.0+, 6.0+ и т. Д.)? – Nate

+0

Как использовать отладчик? не вижу исключения, потому что try catch уже, я использую 7.0 SDK и минимум 1.0, но я хочу изменить его на 5.0 SDK, если не мое устройство не может установить –

+0

Используете ли вы BlackBerry JDE для создания своего программного обеспечения? Или Eclipse с подключаемым модулем BlackBerry? Или что-то другое? – Nate

ответ

0

Вам нужно добавить соединение расширение на ваш адрес.

как если Wi-Fi, то "интерфейс = WiFi"

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

Используя совершенное соединение perameter образца

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; 
    } 

эталонные URLs :

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

+0

'getWAP2ServiceRecord()' как это? –

1

Я считаю, что Алан сказал, что он нужен только для поддержки OS 5.0 и выше. Если это правда, то я бы не рекомендовать, чтобы он беспокоился о строительстве соединения расширение строки, такие как ";interface=wifi".

OS 5.0 добавила ConnectionFactory class, что значительно упростит работу.

Устройства BlackBerry могут выполнять сетевые запросы с одной из многих различных сетей. переносит. Некоторые приложения заботятся о том, какие транспорты используются. Другие приложения просто хотят получить транспорт.

Для примера использования ConnectionFactory для create a Connection with the first available transport, see this example

Для более продвинутых например, что показывает использование ConnectionFactory указать list of transports to use first, and which to not use at all, see this example.

Во втором примере код использует BrowserField, который Алан не использует. Но он может заменить его код

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

С этим

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

где MyConnectionFactory является shown in the sample code.

+0

Я все равно буду использовать '; interface = wifi', потому что теперь все еще использую jre 7.0. Однако скоро я могу изменить на 5.0, но я не могу его изменить, хотя я загрузил jre 5.0 –

+0

@AlanLai, вам не нужно использовать интерфейс'; = wifi' для любого кода, который работает на ОС 5.0 ** или более поздней версии **. Итак, для ОС 7.0 вам определенно не нужно использовать строки суффикса подключения. «ConnectionFactory» - рекомендуемый подход. – Nate

+0

Проблема в том, что я не использую, тогда не могу отобразить, но после ее применения он может отображать –

Смежные вопросы