Обновить изображение в Android с изображением, которое я получил на фоне

1

Мой вопрос касается этого 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, потому что это не активность...

Теги:
multithreading
background
sockets
imageview

3 ответа

0
Лучший ответ

Измените образ вашего ImageView в Runnable, запущенный Activity.runOnUIThread(Runnable) или Handler.post(Runnable)

  • 0
    Ваш обработчик должен быть создан потоком пользовательского интерфейса
  • 0
    Подождите. На основной деятельности, в методе onCreate () я запускаю фоновый поток, который получает изображение. из фоновой темы я должен запустить другой runnable, как вы уже отметили, и обновить imageView?
Показать ещё 1 комментарий
1

После того, как вы получите новое изображение, назовите это:

runOnUiThread(new Runnable() {
        public void run() {
            imView.setBackgroundResource(yourResource);
        }
    });   

Просто сделайте очевидные изменения в соответствии с вашим кодом.

0

Вы можете сделать это двумя способами:

a) один способ вызывает рабочий поток, используя обработчик и исполняемый из основного потока, который выполняет выборку и декодирование изображений. После того как вы получили декодированное изображение, просто установите изображение из рабочего потока

b) В качестве альтернативы вы можете использовать функцию async task для android для извлечения изображений и обновления изображения в основной теме

  • 0
    тема была просто редактировать ..
  • 0
    просто верните растровое изображение в метод doinbackground и добавьте метод onPostExecute, который принимает растровое изображение в качестве параметра, а внутри этого метода задайте вид изображения для этого растрового изображения
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню