【问题标题】:textView setText() and append() crashing when OnClick function is called调用 OnClick 函数时 textView setText() 和 append() 崩溃
【发布时间】:2016-06-20 10:18:45
【问题描述】:

我正在制作一个数独应用程序,我想添加一个移动计数器,所以我有一个 textView,每次用户输入数字时都会显示移动计数

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"/>

【问题讨论】:

  • 异常信息是什么?
  • 当您提出问题时,也请发布您的堆栈跟踪信息。
  • @m02ph3u5 添加了错误信息
  • @MehrajMalik 对不起,第一次在这个网站上提问。

标签: java android-intent textview sudoku settext


【解决方案1】:

你每次设置文本时 moveCountText 为空。

改变这个-

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

到-

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

并实现 View.OnClickListner 会为你工作:)

【讨论】:

  • 谢谢它的工作,但它现在说 moveCountText.setText(message);指的是一个空对象:(
  • 请确认您在 setContextView(R.layour.YOUR_XML_FILE_NAME) 中膨胀了正确的 xml;
  • 为该视图添加了 xml
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多