2016-06-20 8 views
-2

스도쿠 응용 프로그램을 만들고 이동 카운터를 추가하여 사용자가 숫자를 입력 할 때마다 movecount와 함께 표시되는 textView를 갖 춥니 다.TextView setText() 및 append()가 OnClick 함수가 호출 될 때 충돌합니다

public class NumberButton extends Button implements OnClickListener { 

    private int number; 
    TextView moveCountText; 
    private int moves; 
    private String message; 

    public NumberButton(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setOnClickListener(this); 
     moveCountText = (TextView)findViewById(R.id.moveCountView); 
    } 

    @Override 
    public void onClick(View v){ 
     moves++; 
     message="Move Count: "+ moves; 
     moveCountText.setText(message); 
     moveCountText.invalidate(); 


     GameEngine.getInstance().setNumber(number); 
    } 

    public void setNumber(int number){ 
     this.number = number; 
    } 
} 

문제는 setText에서 뷰가 비어 있다고 (null 객체) 말했지만 이유를 모르겠습니다. 다음은 textView XML입니다. 같은 내 승리의 활동에 무슨 일이 일어나고

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="Move count: 0" 
    android:id="@+id/moveCountView" 
    android:layout_marginLeft="100dp" 
    android:layout_marginStart="114dp" 
    android:layout_marginTop="450dp"/> 

는 오류가 의도 null 객체 여기

public void checkGame(){ 
    int [][] sudGrid = new int[9][9]; 
    for(int x = 0 ; x < 8 ; x++){ 
     for(int y = 0 ; y < 8 ; y++){ 
      sudGrid[x][y] = getItem(x,y).getValue(); 
     } 
    } 

    if(SudokuChecker.getInstance().checkSudoku(sudGrid)){ 
     Toast.makeText(context, "Congratulations!", Toast.LENGTH_LONG).show(); 

     // opens victory screen 
     Intent nextScreen = new Intent(getApplicationContext(), VictoryActivity.class); 
     startActivity(nextScreen); 
    } 
} 

오류 메시지가

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference 
                      at sudoku.view.buttonsgrid.NumberButton.onClick(NumberButton.java:33) 
                      at android.view.View.performClick(View.java:5156) 
                      at android.view.View$PerformClick.run(View.java:20755) 
                      at android.os.Handler.handleCallback(Handler.java:739) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:145) 
                      at android.app.ActivityThread.main(ActivityThread.java:5832) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:372) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 

그리고 XML되고 있다는 것이다

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:text="Move count: 0" 
    android:id="@+id/moveCountView" 
    android:layout_marginLeft="100dp" 
    android:layout_marginStart="114dp" 
    android:layout_marginTop="450dp"/> 
+0

예외 메시지가 무엇 View.OnClickListner 을 구현? – m02ph3u5

+0

질문을 할 때도 스택 추적을 게시하십시오. –

+0

@ m02ph3u5 님이 오류 메시지를 추가했습니다. –

답변

0

moveCountText is null e 텍스트를 설정하는 바로 그 때.

변경

moveCountText =(TextView)findViewById(R.id.moveCountView); 
moveCountText.setOnClickListner(this); 

및 대 this-

setOnClickListener(this); 
moveCountText =(TextView)findViewById(R.id.moveCountView); 

당신을 위해 작동합니다 :)

+0

고마워요. 작동하지만 이제는 다음과 같이 말하고 있습니다. moveCountText.setText (message); 은 null 객체를 참조합니다. ( –

+0

setContextView (R.layour.YOUR_XML_FILE_NAME)에서 올바른 xml을 부 풀음을 확인하십시오. 해당 뷰의 XML이 –

+0

에 추가되었습니다. –