sendfile을 사용하는 C 프로그램에서 소켓을 통해 수신되는 두 개의 연속 이미지를 Android 앱에 표시하려고합니다. 보낸 사람 코드가 제대로 작동하는 것 같아서 안드로이드 코드 쪽에서 문제가 있습니다.Android ImageView가 소켓 연결에서 수신 된 이미지를 표시하지 않습니다.
안드로이드 응용 프로그램의 코드의 일부는 다음
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);
}
}
}
}
}
내가 직면하고 문제는 안드로이드 응용 프로그램에서 수신 된 첫 번째 이미지가 제대로 표시 한 후, 그 다음 하나받은 것입니다 (이 가 정확하게 수신 됨)은 표시되지 않고 공백을 나타내는 이미지 뷰 객체를 떠난다.
이 문제를 해결하기위한 제안이나 아이디어가 있으십니까?.
당신이 제공 할 수있는 도움에 미리 감사드립니다.
EDIT :
그것은 그것을받은 후 적절한 화상으로 데이터를 디코딩하는 데에 문제 같은데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 = 새 DataInputStream (socket.getInputStream());" 및 "Drawable d2; d2 = (Drawable) msg.obj; imageSock.setImageDrawable (d2);" to "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
나는 백그라운드 스레드에서 계속 디코딩을 유지하고'Drawable' 대신'Bitmap'을 다시 전달했습니다. 메인 쓰레드에서'decodeStream()'을 호출하도록 코드를 변경하면 아마 그 작업이 오랜 시간이 걸리기 때문에 AND를 유발할 수 있습니다. – Devunwired