我的代码用于在按下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();
}
}
答案 0 :(得分:2)
每次迭代时始终关闭并打开新的InputStream
。
if (inputStream != null) inputStream.close();