从Thread设置imageView

时间:2013-04-13 16:09:11

标签: java android

我正在使用freind下载图片并设置在ImageView;但是,我收到了这个错误:

  

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

这是我的代码。

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

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

此线程正在OnCreate方法中运行。

3 个答案:

答案 0 :(得分:4)

您无法直接从Thread更新用户界面。相反,请使用runOnUiThread()或同等的。

替换

profilePic.setImageBitmap(image_profile);

有了这个

YourActivityName.this.runOnUiThread(new Runnable() {
    @Override
    public void run() {
        profilePic.setImageBitmap(image_profile);
    }
});

答案 1 :(得分: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();

答案 2 :(得分:1)

问题不在于Bitmap。问题是您尝试在单独的UI中执行Thread项内容。根据您提供的代码,Thread没有理由。删除Thread。如果您正在执行其他未显示的内容,则可以使用runOnUiThreadAsyncTask并使用除ImageView以外的任何方法更新doInBackground() t在UI

上运行