2015-04-01 39 views
0

在我的應用程序Android中,我試圖從套接字服務器接收一些圖像,但我無法用setImageBitmap()顯示它們。我沒有任何錯誤,但我的屏幕保持白色。 這裏是我的代碼:顯示位圖setImageBitmap

public class CommunicateurAndroid implements Runnable { 
    public CommunicateurAndroid(Socket s, ImageView img) { 
     _imageV = img; 
     try { 
      _din = new DataInputStream(s.getInputStream()); 
      _dout = new DataOutputStream(s.getOutputStream()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     new Thread(this).start(); 
    } 

    public void run() { 

     int length = 0; 
     byte tmp; 
     while (true) try { 
      length = _din.readInt(); 
      byte tab[] = new byte[length]; 
      for (int i = 0; i < length; i++) { 
       tmp = _din.readByte(); 
       tab[i] = tmp; 
      } 
      _image = BitmapFactory.decodeByteArray(tab, 0, tab.length); 
      System.out.println("----------"); 
      if (_image != null) { 
       _imageV.setImageBitmap(_image); 
       System.out.println("TEST"); 
       Thread.sleep(5000); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 

    public Bitmap get_image() { 
     return _image; 
    } 

    private DataInputStream _din; 
    private DataOutputStream _dout; 
    private Bitmap _image; 
    private ImageView _imageV; 

} 

我調用構造函數這一行
new CommunicateurAndroid(_socket, (ImageView) findViewById(R.id.ImageView3_Left));

任何人可以幫助我嗎?

+0

告訴你看到哪個println(),長度和tab.length的值是多少?它是否等於發送的圖像的大小? _image是否爲空?請提供正常的調試信息 – greenapps 2015-04-01 20:45:05

+0

我看到了所有println()s(「----------」和「TEST」),並且length和tab.length的值是相同的並且等於發送圖像的大小。 – user4738964 2015-04-05 15:37:27

+0

您應該將位圖設置爲主線程中的ImageView。我想知道爲什麼你沒有運行時錯誤。 – greenapps 2015-04-05 16:07:55

回答

0

從服務器接收圖像並顯示它們的最佳方法是使用Android-Universal-Image-Loader庫。

我在我的應用程序中使用它,它是解決您的問題的最佳解決方案。

+0

不可以。這不是一個http服務器。 – greenapps 2015-04-01 20:47:25

+0

誰說它的服務器 – 2015-04-13 18:22:15