2016-06-20 52 views
-2

我正在制作一个Sudoku应用程序,并且我想添加一个移动计数器,因此每当用户输入一个数字时,我都会看到一个与movecount一起显示的textView当调用OnClick函数时textView setText()和append()崩溃

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说视图是空的(空对象),但我不知道为什么。这是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"/> 

同样正在发生的事情对我的胜利活动中,错误的是,其意图是一个空对象

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

you moveCountText is null e非常时间你正在设置文本。

更改这个 -

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

TO-

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

和实施View.OnClickListner 会为你工作:)

+0

谢谢,但它现在说, moveCountText.setText(message); 指空对象:( –

+0

请验证您是否在setContextView(R.layour.YOUR_XML_FILE_NAME)中正确填充xml; –

+0

为该视图添加了xml –