2012-04-27 88 views
0

這是我用來獲取圖像形式的URL代碼,但我越來越blanck屏幕請幫助。 代碼爲HttpConnection的:從url黑莓顯示圖像

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

代碼從perticuler URL得到圖片:

public static Bitmap getImage(String url) 
{ 

    Bitmap bitmap; 
    EncodedImage bmp = EncodedImage.createEncodedImage(data, 0, data.length); 
    bitmap=bmp.getBitmap(); 
    return bitmap; 
} 

下面的代碼我使用到MainScreen顯示圖像:

Bitmap bt=HttpUtils.getImage("http://www.eng.chula.ac.th/files/building.jpg");     
     BitmapField bmp=new BitmapField(bt); 
     bmp.setBitmap(bt); 
     add(bmp); 

回答

0

試試這個代碼 -

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

} 
+0

C你告訴我如何異步? – JoVinz 2012-04-27 10:02:00

+0

在線程中運行此行'http_image_data_extrator.getWebData(url,this);'以避免阻塞。 – Rupak 2012-04-27 12:15:06

+0

Thanx我從url獲得圖像..現在我將它們添加到listfield。我希望當我運行應用程序時,我希望在滾動中獲取圖像的空白列表... – JoVinz 2012-05-03 13:23:51