Java 测量时间导致的Nullpointerexception?
我想测量第一次按钮点击和第三次按钮点击之间的时间。代码本身工作正常,但当我在设备上第三次单击按钮时,我得到了一个nullpointerexception 为什么? 代码如下:Java 测量时间导致的Nullpointerexception?,java,android,button,nullpointerexception,Java,Android,Button,Nullpointerexception,我想测量第一次按钮点击和第三次按钮点击之间的时间。代码本身工作正常,但当我在设备上第三次单击按钮时,我得到了一个nullpointerexception 为什么? 代码如下: public class Game extends Activity implements OnClickListener{ Button start_time; int i = 0; TextView textview1; Button RelativeLayout; Button gameover; @Ove
public class Game extends Activity implements OnClickListener{
Button start_time;
int i = 0;
TextView textview1;
Button RelativeLayout;
Button gameover;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// RelativeLayout.setClickable(true);
setContentView(R.layout.activity_game);
start_time = (Button) findViewById(R.id.start_time);
start_time.setOnClickListener(this);
textview1 = (TextView) findViewById(R.id.textView1);
gameover = (Button) findViewById(R.id.gameover);
gameover.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
finish();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.game, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onClick(View v) {
textview1 = (TextView) findViewById(R.id.textView1);
Random r = new Random();
RelativeLayout decorView = (RelativeLayout) start_time.getParent();
int screenWidth = decorView.getWidth();
int screenHeight = decorView.getHeight();
long startTime = SystemClock.elapsedRealtime();
i++;
if (i == 1 ) {
start_time.setX(r.nextInt(screenWidth - start_time.getWidth()));
start_time.setY(r.nextInt(screenHeight - start_time.getHeight()));
}
if (i == 2 ) {
start_time.setX(r.nextInt(screenWidth - start_time.getWidth()));
start_time.setY(r.nextInt(screenHeight - start_time.getHeight()));
}
if (i == 3 ) {
start_time.setX(r.nextInt(screenWidth - start_time.getWidth()));
start_time.setY(r.nextInt(screenHeight - start_time.getHeight()));
}
if (i == 4 ) {
start_time.setX(r.nextInt(screenWidth - start_time.getWidth()));
start_time.setY(r.nextInt(screenHeight - start_time.getHeight()));
}
if (i == 5 ) {
start_time.setX(r.nextInt(screenWidth - start_time.getWidth()));
start_time.setY(r.nextInt(screenHeight - start_time.getHeight()));
}
if (i == 6 ) {
start_time.setX(r.nextInt(screenWidth - start_time.getWidth()));
start_time.setY(r.nextInt(screenHeight - start_time.getHeight()));
}
else if (i == 7) {
long difference = SystemClock.elapsedRealtime() - startTime;
Intent intent = new Intent(Game.this, MainScreen.class);
intent.putExtra("time",difference);
// textview1.setText(intent.getStringExtra("time"));
// textview1.setText(String.valueOf(difference));
finish();
}
}
}
主要活动包括:
public class MainScreen extends Activity implements OnClickListener {
Button btn_start;
TextView textview1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_screen);
btn_start = (Button) findViewById(R.id.btn_start);
btn_start.setOnClickListener(this);
textview1 = (TextView) findViewById(R.id.textView1);
}
@Override
public void onClick(View v) {
startActivityForResult(new Intent(this,Game.class), 0);
textview1.setText(getIntent().getStringExtra("time"));
}
}
日志:
03-09 16:08:10.760: E/AndroidRuntime(6372): FATAL EXCEPTION: main
03-09 16:08:10.760: E/AndroidRuntime(6372): Process: ch.frozensparks.asdf, PID: 6372
03-09 16:08:10.760: E/AndroidRuntime(6372): java.lang.NullPointerException
03-09 16:08:10.760: E/AndroidRuntime(6372): at ch.frozensparks.bftjh.Game.onClick(Game.java:118)
03-09 16:08:10.760: E/AndroidRuntime(6372): at android.view.View.performClick(View.java:4470)
03-09 16:08:10.760: E/AndroidRuntime(6372): at android.view.View$PerformClick.run(View.java:18593)
03-09 16:08:10.760: E/AndroidRuntime(6372): at android.os.Handler.handleCallback(Handler.java:733)
03-09 16:08:10.760: E/AndroidRuntime(6372): at android.os.Handler.dispatchMessage(Handler.java:95)
03-09 16:08:10.760: E/AndroidRuntime(6372): at android.os.Looper.loop(Looper.java:157)
这一行出现了例外情况
textview1.setText(getIntent().getStringExtra("time"));
您正试图从当前活动中获取意图,但在此处传递到新的意图对象
Intent intent = new Intent(Game.this, MainScreen.class);
intent.putExtra("time",difference);
导航到游戏时,您需要完成yoir主屏幕活动。 MainScreen.this.finish();在主屏幕的onClick方法中 此外,您还需要在游戏活动的onclick中启动活动
startActivity(intent)
(首先,我假设您文章顶部的代码是Game.class的一部分。)
好吧,我想你误解了意图的作用
Intent intent = new Intent(Game.this, MainScreen.class);
intent.putExtra("time", difference);
在这里,您创建了一个新的intent(称为“intent”),并将带有键“time”的值“difference”放入其中
然后
这里您试图访问该值,但实际上您正在访问一个完全不同的意图对象。通过使用getIntent(),您正在访问用于启动当前活动的intent对象,而不是您在上面定义的对象。(您还试图从intent中获取一个额外的字符串,但您正在存储一个长字符串。)
如果要访问该意图对象,只需使用:
intent.getStringExtra("time");
所以你的路线是:
textview1.setText(intent.getStringExtra("time"));
但我会这样做:
textview1.setText(String.valueOf(difference));
最后一件事,我不能确定您在代码的顶部块中定义textview1的位置,但是如果您试图引用可能导致您的问题的主屏幕的一部分textview1,那么您可能必须将其公开,或者将差分变量传递回主屏幕并在主屏幕中设置文本。哪里定义了
开始时间
?我只看到一个long startTime
,这是一个很长的时间,实际上永远不会公开任何getWidth()
或getHeight()
方法。textview1启动了吗?“代码本身工作正常”-不是真的。getIntent()可能就是获取空指针的地方。getIntent背后的目的是什么?你能发布stacktrace吗?问题中的更新代码我在问题中添加了logcat对不起,文本视图1在我的主活动中。更新的代码getIntent().getStringExtra(“时间”)给你带来了什么价值?对不起…我真的不明白…你是说“时间”吗?意图。额外(“时间”,差异);我还把logcat放在qtanks@Fahim中。我已把你的答案标为正确。如果你认为我的问题有助于这样做,请你投票表决!谢谢现在我修改了代码,试图解决它,而空指针不见了!但是我没有得到任何类型的数字,时间应该显示在哪里…它只是空的。//是我已经尝试过的文本可能是白色的,显示在白色背景上-尝试设置颜色。您可以将任何文本设置为textview1(只需尝试将“test”或其他字符串放入其中即可)?你确定你有正确的TextView作为textview1,而不是其他的吗?
textview1.setText(String.valueOf(difference));