2

我正在使用朋友下载图片并设置在ImageView; 但是,我收到此错误:

只有创建视图层次结构的原始线程才能接触其视图。

这是我的代码。

ImageView profilePicture =....
Thread thread = new Thread() {
    @Override
    public void run() {
        profilePic.setImageBitmap(image_profile);
    }
};
thread.start();

image_profileBitmap是一个有效的Bitmap文件。(我通过调试检查了它。)

该线程在OnCreate方法中运行。

4

3 回答 3

4

您不能直接从Thread. 相反,使用runOnUiThread()或等效。

替换这个

profilePic.setImageBitmap(image_profile);

有了这个

YourActivityName.this.runOnUiThread(new Runnable() {
    @Override
    public void run() {
        profilePic.setImageBitmap(image_profile);
    }
});
于 2013-04-13T16:12:16.990 回答
3

您不能在另一个线程上更新 ui。在主 ui 线程上更新 ui,如下所示

Thread thread = new Thread()
{
    @Override
    public void run() {
    runOnUiThread(new Runnable() //run on ui thread
    {
        public void run() 
        { 
            profilePic.setImageBitmap(image_profile);

        }
    });
    }
    };
   thread.start();
于 2013-04-13T16:12:08.380 回答
1

问题不在于Bitmap. 问题是您试图UI在单独的Thread. 使用您提供的代码,没有理由使用Thread. 删除Thread. 如果您正在做其他未显示的事情,那么您可以使用runOnUiThreadAsyncTask更新ImageView任何方法,除非doInBackground()它不在UI

于 2013-04-13T16:12:50.990 回答