我试图在Android应用程序中显示两个连续的图像,这些图像是通过套接字(使用sendfile的C程序)接收的。发件人代码似乎工作正常,而且我遇到了Android代码方面的问题。Android ImageView未显示来自套接字连接的接收图像
在Android应用程序的代码的一部分是以下内容:
public class DisplayNewActivity extends Activity {
...
@Override
public void onCreate(Bundle savedInstanceState) {
....
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
Drawable d2;
d2 = (Drawable)msg.obj;
imageSock.setImageDrawable(d2); // to set the arrived image in the imageshow object
}
};
...
cThread = new Thread(new ClientThread());
rThread = new Thread(new RcvThread());
cThread.start();
}
public class ClientThread implements Runnable {
public void run() {
// thread used for socket connection.
...
rThread.start(); // once the connection has been established
...
}
}
@SuppressLint("HandlerLeak")
public class RcvThread implements Runnable {
public void run() {
while (connected) {
try {
InputStream inputStream = socket.getInputStream();
Drawable d = Drawable.createFromStream(inputStream, null);
Message msg = new Message();
msg.obj = d;
mHandler.sendMessage(msg);
} catch (Exception e) {
Log.e("SocketConnectionv02Activity", "C: ErrorRCVD", e);
}
}
}
}
}
我面临的问题是,显示正确由Android应用接收的所述第一图像之后,再下一个接收到的(其被正确接收)没有被显示并且留下显示白色空间的imageview对象。
任何建议/想法来解决这个问题?
在此先感谢您提供的任何帮助。
编辑:
public class DisplayNewActivity extends Activity {
...
@Override
public void onCreate(Bundle savedInstanceState) {
....
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
Bitmap d2;
d2 = (Bitmap)msg.obj;
imageSock.setImageBitmap(d2); // to set the arrived image in the imageshow object
}
};
...
cThread = new Thread(new ClientThread());
rThread = new Thread(new RcvThread());
cThread.start();
}
public class ClientThread implements Runnable {
public void run() {
// thread used for socket connection.
...
rThread.start(); // once the connection has been established
...
}
}
@SuppressLint("HandlerLeak")
public class RcvThread implements Runnable {
public void run() {
while (connected) {
try {
DataInputStream in = new DataInputStream(socket.getInputStream());
Bitmap d = BitmapFactory.decodeStream(in);
Message msg = new Message();
msg.obj = d;
mHandler.sendMessage(msg);
} catch (Exception e) {
Log.e("SocketConnectionv02Activity", "C: ErrorRCVD", e);
}
}
}
}
}
嗨,谢谢你的回答。从我发布的代码中,我改变了行“InputStream inputStream = socket.getInputStream(); Drawable d = Drawable.createFromStream(inputStream,null);”到“DataInputStream d = new DataInputStream(socket.getInputStream());”和“Drawable d2; d2 =(Drawable)msg.obj; imageSock.setImageDrawable(d2);”到“DataInputStream d2; d2 =(DataInputStream)msg.obj; imageSock.setImageBitmap(BitmapFactory.decodeStream(d2));”它根本不起作用。事实上,该应用程序不再回答。我是否设置错了? – gus
你认为以这种方式获取信息的方式http://stackoverflow.com/questions/11926421/sending-multiple-images-over-socket#comment15883123_11926455确实会帮助我达到我的目的吗? – gus
我仍然保留在后台线程上的解码,只是传回'Bitmap'而不是'Drawable'。更改代码以在主线程上调用decodeStream()可能现在会导致AND,因为该操作需要很长时间。 – Devunwired