我们有两个活动,一个是通过蓝牙连接和管理blutooth,另一个是更新UI,我们想要更新包含TextViews的GUI。 我们成功地在两个活动中发送和接收消息,反之亦然。
private OnMessageReceivedListener dataReceivedListener = new OnMessageReceivedListener() {
public void OnMessageReceived(String device, String message) {
//t.setText(message);
Log.d("Message" , message);
msg = message;
UpdateGUI();
}
};
以上功能收到了消息,我们成功完成了。
private void UpdateGUI() {
//i++;
//tv.setText(String.valueOf(i));
myHandler.post(myRunnable);
}
final Runnable myRunnable = new Runnable() {
public void run() {
btBoard.UpdateYoursBoard(mystring);
}
};
连接类的上述函数调用GUI类的方法并向其发送收到的消息。
在我们的GUI类中,我们想要这个
public void UpdateYoursBoard(String positions)
{
Log.d("Positions" , positions);
tv.setText(positions);
}; 我们成功收到了log.d中的消息,但是当我们想要更改我们的textview文本时,会出现以下错误。
java.lang.NullPointerException
at net.clc.bt.Board.UpdateYoursBoard(Board.java:3460)
注意:我们正在使用蓝牙,我们同时连接3个移动设备,UpdateYourBoard将更改3个移动设备GUI的TextViews。
请帮助我解决问题。 提前致谢
答案 0 :(得分:2)
首先你的董事会课程太大了。 java文件中有3 500行是个坏主意。设计更多,分离和拆分东西。你错过了IT的分歧和征服原则。
在你的情况下,tv为null。你如何以及何时获得它的参考?如果你在onCreate方法中使用了findViewById(在调用super.onCreate之后),它应该可以工作。
答案 1 :(得分:0)
对TextView' tv'的引用一片空白。使用findViewById()
或其他适当的方法在某处初始化它。
检查您的范围等,以便在您调用setText()
方法时正确维护引用。