Мой вопрос касается этого thread- Как обновить изображение в андроиде
Я тоже пытаюсь получить изображение через сокет, расшифровать его и установить его на изображении. Сокет должен оставаться открытым, если будет отправлено другое изображение, а затем обновить изображение снова.
Я не получил часть, когда в другой теме они отвечали, чтобы не делать это в основной теме.
Из основного действия я должен открыть новый поток, который будет "застревать" на "while (true)", чтобы он мог продолжать прослушивать идущие изображения, и когда когда-либо отправлялось полное изображение, ему необходимо обновить изображение. Но образное изображение находится в основном потоке (основной поток равен UI-потоку?), Поэтому его начало немного проблематично для меня...
Кто угодно?
//ADDED - это asyncTask, который у меня был -
public class AsyncTask extends AsyncTask<Void, Void, Void> {
private DataInputStream dataInputStream = null;
private ImageView iv = null;
public RobotMapAsyncTask(DataInputStream dataStream, ImageView imageView) {
dataInputStream = dataStream;
iv = imageView;
}
@Override
protected Void doInBackground(Void... params) {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
byte[] byteChunk = new byte[1024];
Bitmap bitmap = null;
int c;
if (dataInputStream != null) {
while (true) {
try {
byteChunk = new byte[1024];
while ((c = dataInputStream.read(byteChunk)) != -1){
buffer.write(byteChunk, 0, c);
}
} catch (IOException e) {
e.printStackTrace();
}
bitmap = BitmapFactory.decodeByteArray(byteChunk, 0, byteChunk.length);
if (bitmap != null) {
//runOnUiThread(new Runnable() {
//public void run() {
//iv.setImageBitmap(bitmap);
//}
// });
}
}
}
return null;
}
но тогда я явно не могу вызвать runOnUiThread, потому что это не активность...
Измените образ вашего ImageView в Runnable, запущенный Activity.runOnUIThread(Runnable)
или Handler.post(Runnable)
После того, как вы получите новое изображение, назовите это:
runOnUiThread(new Runnable() {
public void run() {
imView.setBackgroundResource(yourResource);
}
});
Просто сделайте очевидные изменения в соответствии с вашим кодом.
Вы можете сделать это двумя способами:
a) один способ вызывает рабочий поток, используя обработчик и исполняемый из основного потока, который выполняет выборку и декодирование изображений. После того как вы получили декодированное изображение, просто установите изображение из рабочего потока
b) В качестве альтернативы вы можете использовать функцию async task для android для извлечения изображений и обновления изображения в основной теме