我需要更新一些UI并使用UI线程在UI线程内完成.runOnUiThread
现在UI的数据来自另一个Thread,由data此处表示.
如何将数据传递给Runnable,以便它们可用于更新UI?Android似乎不允许直接使用数据.有一种优雅的方式来做到这一点?
public void OnNewSensorData(Data data) {
runOnUiThread(new Runnable() {
public void run() {
//use data
}
});
}
Run Code Online (Sandbox Code Playgroud)
我的解决方案是private Data sensordata在runnable中创建一个fioeld ,并为其分配数据.如果原件Data data是最终的,这只有效.
public void OnNewSensorData(final Data data) {
runOnUiThread(new Runnable() {
private Data sensordata = data;
public void run() {
//use sensordata which is equal to data
}
});
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
Android - ViewRootImpl $ CalledFromWrongThreadException
我试图从我的URL获取图像并在应用程序中显示但它抛出错误引起:android.view.ViewRootImpl $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及其视图.以下是我的代码
码
package com.smartag.bird.dev;
public class MainActivity extends Activity {
static String ndefMsg = null;
static String ndefMsg1 = null;
NfcAdapter mNfcAdapter;
PendingIntent mNfcPendingIntent;
IntentFilter[] mNdefExchangeFilters;
static final String TAG = "Read Tag";
TextView mTitle;
private static ImageView imageView;
static String url = "http://sposter.smartag.my/images/chicken_soup.jpg";
private static Bitmap downloadBitmap;
private static BitmapDrawable bitmapDrawable;
private static boolean largerImg = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
mNfcPendingIntent …Run Code Online (Sandbox Code Playgroud)