2

우리는 두 가지 작업을 수행합니다. 하나는 블루투스를 통해 연결하고 다른 하나는 텍스트 뷰를 포함하는 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 변경됩니다.

친절하게 문제를 해결할 수 있도록 도와주세요. 미리 감사드립니다.

답변

2

먼저 보드 등급이 너무 큽니다. 자바 파일에서 3 500 라인은 매우 나쁜 생각입니다. 더 많은 것을 디자인하고 분리하고 분리하십시오. 당신은 IT의 분열과 conqueer 원칙을 놓치고 있습니다.

귀하의 경우, tv는 null입니다. 언제 어떻게 참조 할 수 있습니까? onCreate 메서드에서 findViewById를 사용한 경우 (super.onCreate가 호출 된 후) 작동해야합니다.

+0

thnx 답장입니다. 우리는 super.oncreate 후에 초기화하고 있습니다. 문제는 우리의 connecion 클래스에서 우리가 보드 클래스의 메서드를 호출하고 textview 텍스트를 업데이트하려고합니다. 보드 클래스 활동이 전면에 있습니다. 왜 우리에게 NullPointer 예외를주고 있는지 모르겠다. –

+0

thnx Public static textView tv로 선언하고 text를 this.tv로 설정하면 해결됩니다. setText (mystring); –

+0

답변을 수락하기위한 Thx, 나는 기꺼이 도와주었습니다. 그러나 나는 왜 TV가 정적이어야하는지 이해하지 못합니다. 일반적으로 Android에서 정적 UI 필드를 사용하는 것은 좋은 생각이 아닙니다. 보기는 얼마 동안 표시되는 클래스의 인스턴스에 링크됩니다. 이 인스턴스는 죽을 것이고 뷰는 표시되지 않습니다. 참조를 유지하면 가비지 컬렉터가 쓸모없는 엔티티를 제거 할 수 없습니다. 인스턴스는보기를 공유하지 않으며 활동의 각 인스턴스는 자체보기를 가지며이 활동의 ​​수명 동안 만 의미가 있습니다. – Snicolas

0

TextView 'tv'에 대한 참조가 null입니다. findViewById() 또는 다른 적절한 방법을 사용하여 어딘가에 초기화하십시오.

setText() 메서드를 호출 할 때 참조가 제대로 유지되도록 범위 등을 확인하십시오.

+0

내 GUI 클래스에서 호출 할 때 잘 작동합니다. 이 함수는 텍스트를 성공적으로 설정했지만 내 다른 활동 클래스에서이 메서드를 호출하면 NULLPointer 예외가 발생합니다 –

+0

thnx public static textView tv로 선언하고 this.tv, setText (mystring);으로 텍스트를 설정하여 해결됩니다. –

관련 문제