Android:BitmapFactory.decodeStream()在第一次成功后返回null

时间:2014-04-27 00:20:05

标签: java android ffmpeg inputstream bitmapfactory

我的代码用于在按下UI按钮时使用服务器中的图像更新ImageView。

下面显示的客户端代码是按下按钮时运行的Runnable。该服务器是一个桌面Java应用程序,ffmpeg在后台运行,不断更新image.png,其中包含来自网络摄像头的图像。当在Android应用程序上按下按钮时,Android应用程序会尝试从服务器接收image.png,并且由于ffmpeg会不断更新此图像,因此它应该是服务器网络摄像头拍摄的最新图像。 / p>

我的问题是按下第一个按钮会显示正确的图像,但每次按下按钮都会清除我的ImageView。每次我第一次调用它后,BitmapFactory.decodeStream()都返回null。

客户端(按下按钮时运行):

InputStream inputStream = s.getInputStream();
img = BitmapFactory.decodeStream(inputStream);          
jpgView.setImageBitmap(img);        
jpgView.invalidate();

服务器端:

ServerSocket sock = new ServerSocket(PORT_NUMBER);
Socket clientSocket = sock.accept();
for (;;) {
    File f = new File("C:/folder/image.png");
    FileInputStream fileInput = new FileInputStream(f);
    BufferedInputStream bufferedInput = new BufferedInputStream(fileInput);
    OutputStream outStream = clientSocket.getOutputStream();
    try {
        byte[] outBuffer = new byte[fSize];
        int bRead = bufferedInput.read(outBuffer, 0, outBuffer.length);
        outStream.write(outBuffer, 0, bRead);
        outStream.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            bufferedInput.close();
        }
    }

1 个答案:

答案 0 :(得分:2)

每次迭代时始终关闭并打开新的InputStream

if (inputStream != null) inputStream.close();