蓝牙部分问题
一、使用一个接口类时,对一个活动设置监听时,在适当的地方调用监听的覆写方法时,在调用监听覆写方法的这个类中需要定义一个用Static修饰的监听类,来接收需要监听的活动。
public interfaceDataFromClientListener {void getDataFromClient(String data);}
@Override public void getDataFromClient(String data0) { final String data = data0; this.runOnUiThread(new Runnable() { @Override public void run() { StringBuffer buffer = new StringBuffer(); buffer.append(data + "\n"); receiveData.setText(buffer.toString()); } }); }private static DataFromClientListener mListener;//在需要定义一个用Static修饰的监听类,来接收需要监听的活动二、当使用到主线程中的view来更新UI操作时,一定要回到主线程中进行UI操作,否则会出现:android.view.ViewRoot$CalledFromWrongThreadException异常
解决方法:1、 利用activity.runonuithread(runnable)把更新ui的代码创建在runnable中,然后在需要更新ui时,把这个runnable对象传给activity.runonuithread(ru nnable)。 这样runnable对像就能在ui程序中被调用。
@Override public void getDataFromClient(String data0) { final String data = data0; this.runOnUiThread(new Runnable() { @Override public void run() { StringBuffer buffer = new StringBuffer(); buffer.append(data + "\n"); receiveData.setText(buffer.toString()); } }); }2、在活动的oncreate(bundle savedinstancestate)中创建一个handler类的实例, 在这个handler实例的han dlemessage回调函数中调用更新界面显示的函数
public class ExampleActivity extends Activity { Handler h = null; @override public void onCreate(Bundle savedinstancestate){ h = new Handler(){ @override public void handleMessage(Message msg){ // 写入需要更新主线程中哪一个view视图 } }; } }