2

2つのアクティビティがあります。1つはBluetooth経由で接続を確立し、もう1つはBluetoothを管理することです。もう1つは、TextViewを含むGUIを更新するUIを更新することです。2つのアクティビティ内でメッセージの送受信に成功し、その逆も同様です。

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でメッセージを正常に受信しましたが、テキストビューテキストを変更する場合、次のエラーが発生します。

       java.lang.NullPointerException
       at net.clc.bt.Board.UpdateYoursBoard(Board.java:3460) 

:Bluetoothを使用しており、3つのモバイルが同時に接続されており、UpdateYourBoardによって3つのモバイルGUIのTextViewが変更されます。

親切に問題を解決するのを手伝ってください。前もって感謝します

4

2 に答える 2

2

まず、ボードクラスが大きすぎます。3Javaファイルの500行は非常に悪い考えです。より多くの設計を行い、物事を切り離して分割します。ITの分割と征服の原則が欠けています。

あなたの場合、テレビはヌルです。いつ、どのようにそれへの参照を取得しますか?onCreateメソッドでfindViewByIdを使用した場合(super.onCreateが呼び出された後)、それは機能するはずです。

于 2012-11-04T09:00:34.073 に答える
0

TextView'tv'への参照がnullです。findViewById()または他の適切な方法を使用して、どこかで初期化します。

メソッドを呼び出すポイントで参照が適切に維持されるように、スコープなどを確認してくださいsetText()

于 2012-11-04T09:07:06.780 に答える