Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 测量时间导致的Nullpointerexception?_Java_Android_Button_Nullpointerexception - Fatal编程技术网

Java 测量时间导致的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

我想测量第一次按钮点击和第三次按钮点击之间的时间。代码本身工作正常,但当我在设备上第三次单击按钮时,我得到了一个nullpointerexception

为什么?

代码如下:

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));