우리는 두 가지 작업을 수행합니다. 하나는 블루투스를 통해 연결하고 다른 하나는 텍스트 뷰를 포함하는 GUI를 업데이트하려는 UI를 업데이트하는 것입니다. 두 가지 활동에서 성공적으로 메시지를 보내고받습니다. 그 반대의 경우도 마찬가지입니다.안드로이드 UI에서 TextViews가 업데이트되지 않음
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 변경됩니다.
친절하게 문제를 해결할 수 있도록 도와주세요. 미리 감사드립니다.
thnx 답장입니다. 우리는 super.oncreate 후에 초기화하고 있습니다. 문제는 우리의 connecion 클래스에서 우리가 보드 클래스의 메서드를 호출하고 textview 텍스트를 업데이트하려고합니다. 보드 클래스 활동이 전면에 있습니다. 왜 우리에게 NullPointer 예외를주고 있는지 모르겠다. –
thnx Public static textView tv로 선언하고 text를 this.tv로 설정하면 해결됩니다. setText (mystring); –
답변을 수락하기위한 Thx, 나는 기꺼이 도와주었습니다. 그러나 나는 왜 TV가 정적이어야하는지 이해하지 못합니다. 일반적으로 Android에서 정적 UI 필드를 사용하는 것은 좋은 생각이 아닙니다. 보기는 얼마 동안 표시되는 클래스의 인스턴스에 링크됩니다. 이 인스턴스는 죽을 것이고 뷰는 표시되지 않습니다. 참조를 유지하면 가비지 컬렉터가 쓸모없는 엔티티를 제거 할 수 없습니다. 인스턴스는보기를 공유하지 않으며 활동의 각 인스턴스는 자체보기를 가지며이 활동의 수명 동안 만 의미가 있습니다. – Snicolas