در برنامه نویسی اندروید این خطا زمانی رخ می دهد که خارج از UI thread (درون یک Thread جدید) بخواهیم به یک المان UI مانند Button دسترسی داشته باشیم. برای حل این مشکل بسته به موقعیت دو راهکار وجود دارد:
1- اگر در Activity هستید و یا به Activity دسترسی دارید، دستکاری المان UI در Thread جدید را با استفاده از متد runOnUiThread کلاس Activity انجام دهید:
new Thread(new Runnable() {
@Override
public void run() {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
//code will always run on the UI thread
}
});
}
}).start();
2- اگر در Activity نیستید و یا به Activity دسترسی ندارید، دستکاری المان UI در Thread جدید را با استفاده از متد post کلاس Handler انجام دهید:
final Handler handler = new Handler();
new Thread(new Runnable() {
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
// code will always run on the UI thread
}
});
}
}).start();