2016-06-20 13 views
-2

Я делаю приложение Sudoku, и я хочу добавить счетчик перемещения, поэтому у меня есть textView, который отображается вместе с movcount каждый раз, когда пользователь вводит число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 говорит, что представление пуст (нулевой объект), но я не знаю почему. Вот текстовый 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"/> 

То же самое происходит в моей победе деятельности, ошибка в том, что цель является пустым объектом

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

Что сообщение исключения? – m02ph3u5

+0

Когда вы задаете вопрос, отправьте вам также трассировку стека. –

+0

@ m02ph3u5 добавлено сообщение об ошибке –

ответ

0

Вы перемещаетеCountText равно null e когда вы устанавливаете для него текст.

Изменить this-

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

to-

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

и осуществлять View.OnClickListner будет работать для вас :)

+0

Спасибо, что сработал, но теперь он говорит, что moveCountText.setText (сообщение); ссылается на нулевой объект :( –

+0

убедитесь, что вы раздуваете правильный xml в setContextView (R.layour.YOUR_XML_FILE_NAME); –

+0

добавил xml для этого представления –