我正在使用freind下载图片并设置在ImageView
;但是,我收到了这个错误:
只有创建视图层次结构的原始线程才能触及其视图。
这是我的代码。
ImageView profilePicture =....
Thread thread = new Thread() {
@Override
public void run() {
profilePic.setImageBitmap(image_profile);
}
};
thread.start();
image_profile Bitmap
是有效的Bitmap
文件。 (我通过调试检查了它。)
此线程正在OnCreate
方法中运行。
答案 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
。如果您正在执行其他未显示的内容,则可以使用runOnUiThread
或AsyncTask
并使用除ImageView
以外的任何方法更新doInBackground()
t在UI