我在第二个活动中有一个计时器。我想从main activity访问它,所以我在第二个activity中将时钟设置为public static,在main activity中设置为"secondActivity.chronometer“,但当启动应用程序时,它显示chronometer.setbase(long) on a null object reference,我检查了xml是否正确。有人知道如何解决这个问题吗?
发布于 2019-11-05 20:51:16
您尚未初始化计时器。当你启动应用程序时,计时器没有任何价值,因为它处于第二个活动中。
发布于 2019-11-05 20:56:28
启动应用程序时,第二个活动未初始化。作为TextView的子类的chronometer也无法初始化。在其他活动中访问或更改视图不是一个好主意。您可以传输数据并按数据显示。
发布于 2019-11-05 21:07:09
正如我在评论中提到的,保留对View的静态引用是一个非常糟糕的主意。首先,正如其他答案所表明的那样,不能保证您的View在您调用它时已经初始化,因为它所在的Activity可能还没有初始化。然而,它也是内存泄漏的主要原因(参见this answer for more detail)。
我的建议是,与其启动Chronometer,不如记下您希望它启动的时间(对于Chronometer,可以通过调用SystemClock#uptimeMillis获得),将其写入Intent,并使用它来启动您的第二个Activity。然后,您可以使用此时间作为您的Chronometer的基准时间,因此给人的印象是它一直在运行整个时间。也就是说。
public class ActivityOne extends Activity {
//...
private void startChronometer() {
final Intent i = new Intent(this, ActivityTwo.class);
i.putExtra("time", SystemClock.uptimeMillis());
startActivity(i);
}
}public class ActivityTwo extends Activity {
private Chronometer chrono;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
//...
chrono = findViewById(R.id.id_of_chronometer);
chrono.setBase(getIntent().getLongExtra("time", SystemClock.uptimeMillis()));
chrono.start();
}
}https://stackoverflow.com/questions/58711636
复制相似问题