【发布时间】:2017-02-24 17:34:28
【问题描述】:
我创建了一个计时器并将其放置在自己的单独类中。由于某种原因,当我尝试运行它时它会崩溃并出现以下错误:
Java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.TextView.setText(java.lang.CharSequence)”
我认为是因为它试图从 Mainactvity 以外的类更新文本视图,但我不知道如何让它工作。
代码如下:
主活动
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
Button resetButton;
TextView textTimer;
int elapsedTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
elapsedTime = 60;
textTimer = (TextView) findViewById(R.id.textTimer);
resetButton = (Button) findViewById(R.id.resetButton);
final Button resetbttn = (Button) findViewById(R.id.resetButton);
resetbttn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CountUp mycountup = new CountUp();
mycountup.count();
}
});
}
}
定时器类:
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
/** * 由 Mat 于 17 年 2 月 24 日创建。 */
public class CountUp extends MainActivity{
TextView textTimer;
Button resetButton;
int elapsedTime;
Handler h;
int RATE = 1000;
MainActivity mainact = new MainActivity();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
textTimer = (TextView) findViewById(R.id.textTimer);
resetButton = (Button) findViewById(R.id.resetButton);
h = new Handler();
count();
final Button resetbttn = (Button) findViewById(R.id.resetButton);
resetbttn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
reset();
}
});
}
public void reset(){
elapsedTime = 60000;
}
public void count(){
elapsedTime--;
textTimer.setText(String.valueOf(elapsedTime));
h.postDelayed(r,RATE);
final String endcomparison = textTimer.getText().toString();
if (endcomparison.equals("0")){
reset();
}
}
private Runnable r = new Runnable() {
@Override
public void run() {
count();
}
};
}
【问题讨论】:
-
我想我现在已经把它移开了。我在主要活动中添加了以下内容:“public static TextView hourtext;”和“hourtext = (TextView) findViewById(R.id.SessionTimerTxt);”。在计时器类中,我已将此“hourtext.setText (String.valueOf(elapsedTime))”更改为“MainActivity.hourtext.setText(String.valueOf(elapsedTime));”。我现在得到一个不同的错误,即“java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'boolean android.os.Handler.postDelayed(java.lang.Runnable,long)'”帮助!!!
标签: java android class timer textview