1

我的问题与此线程有关 -如何在 android 中刷新 imageview

我也试图通过套接字获取图像,对其进行解码,并将其设置在图像视图上。套接字需要保持打开状态,以防发送另一个图像,然后再次更新图像视图。

当在另一个线程中他们响应不在主线程中执行此操作时,我没有得到该部分。

从主要活动中,我应该打开一个新线程,该线程将“卡住”在“while(true)”上,以便它可以继续收听即将到来的图像,并且当发送完整图像时,它需要更新图像视图。但是imageview在主线程中(主线程等于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 因为这不是一个活动......

4

3 回答 3

1

获得新图像后,调用:

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

只需进行明显的更改以适合您的代码

于 2012-06-06T21:23:08.760 回答
0

Activity.runOnUIThread(Runnable) 在由或启动的 Runnable 中更改 ImageView 的图像Handler.post(Runnable)

于 2012-06-06T21:18:14.513 回答
0

您可以通过两种方式做到这一点:

a) 一种方法是使用处理程序调用工作线程,并且可以从主线程运行,该线程执行图像的获取和解码。获得解码图像后,只需从工作线程设置图像视图

b) 或者,您可以使用 android 的异步任务功能来获取图像并更新主线程上的图像视图

于 2012-06-06T21:24:31.933 回答