2

我们有两个活动,一个是我们通过蓝牙建立连接并管理蓝牙另一个是更新我们想要更新包含 TextViews 的 GUI 的 UI。我们在两个活动中成功发送和接收消息,反之亦然。

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。

请帮我解决问题。提前致谢

4

2 回答 2

2

首先,您的董事会课程太大了。java 文件中的 3 500 行是非常糟糕的主意。设计更多,解耦和拆分事物。您错过了 IT 的分而治之原则。

在您的情况下, tv 为空。您如何以及何时获得对它的参考?如果您在 onCreate 方法中使用了 findViewById(在调用 super.onCreate 之后),它应该可以工作。

于 2012-11-04T09:00:34.073 回答
0

对您的 TextView 'tv' 的引用为空。findViewById()使用或其他适当的方法在某处初始化它。

检查您的范围等,以便在您调用该setText()方法的位置正确维护引用。

于 2012-11-04T09:07:06.780 回答