Made a layout for both orientations. I can not understand what the reason is, I have not saved the state yet, for a start, you just need to draw the interface. I understand that widgets are lost and the activity can not find them?
Here is the log:
FATAL EXCEPTION: main Process: com.hfad.test1, PID: 7695 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.hfad.test1/com.hfad.test1.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2346) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2408) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3960) at android.app.ActivityThread.access$900(ActivityThread.java:144) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1327) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5277) 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:919) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:714) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference at com.hfad.test1.MainActivity.onCreate(MainActivity.java:48) at android.app.Activity.performCreate(Activity.java:5983) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2299) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2408) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3960) at android.app.ActivityThread.access$900(ActivityThread.java:144) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1327) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5277) 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:919) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:714) And here is the activity code:
public class MainActivity extends Activity implements View.OnClickListener{ private static final String TAG = "MyLogs"; int myCurrentPeriod = 1500; private Timer myTimer; private Button btnStop; private Button btnStartPause; private Button btnTest; private TextView tv; private TextView etName; private String startStr; private String pauseStr; @Override protected void onCreate(Bundle savedInstanceState) { Log.v(TAG, "try to onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.timer); etName = (EditText) findViewById(R.id.etName); btnStartPause = (Button) findViewById(R.id.btnStartPause); btnStop = (Button) findViewById(R.id.btnStop); btnTest = (Button) findViewById(R.id.btnTest); startStr = getResources().getString(R.string.btnStart); pauseStr = getResources().getString(R.string.btnPause); btnTest.setOnClickListener(this); btnStartPause.setOnClickListener(this); btnStop.setOnClickListener(this); Log.v(TAG, "onCreate"); } @Override protected void onRestart() { super.onRestart(); //Уведомление о том, что будет запущена активность Log.v(TAG, "onRestart"); } @Override protected void onStart() { super.onStart(); //Уведомление о том, что активность запускается Log.v(TAG, "onStart"); } @Override protected void onResume() { super.onResume(); //Уведомление о том, что активность будет взаимодействовать с пользователем Log.v(TAG, "onResume"); } @Override protected void onPause() { super.onPause(); //Уведомление о том, что активность прекращает взаимодействовать с пользователем Log.v(TAG, "onPause"); } @Override protected void onStop() { super.onStop(); //Уведомление о том, что активность больше не видима Log.v(TAG, "onStop"); } @Override protected void onDestroy() { super.onDestroy(); //Уведомление о том, что активность будет удалена if (myTimer != null) { myTimer.cancel(); } Log.v(TAG, "onDestroy"); } @Override protected void onSaveInstanceState(Bundle outState) { //Сохранение состояния экземпляра super.onSaveInstanceState(outState); Log.v(TAG, "onSaveInstanceState"); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); //Восстановление состояни Log.v(TAG, "onRestoreInstanceState"); } @Override public boolean onTouchEvent(MotionEvent event) { etName.clearFocus(); return super.onTouchEvent(event); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btnStartPause: Button btn = (Button)v; String btnString = btn.getText().toString(); if (btnString.equals(startStr)) { btnStartPause.setText(pauseStr); myTimer = new Timer(); myTimer.schedule(new TimerTask() { @Override public void run() { runTimer(); } }, 0, 1000); Log.v(TAG, "onStartClicked"); } else if (btnString.equals(pauseStr)) { btnStartPause.setText(startStr); myTimer.cancel(); Log.v(TAG, "onPauseClicked"); } break; case R.id.btnStop: if (myCurrentPeriod != 1500) { myTimer.cancel(); myCurrentPeriod = 1500; tv.setText("25:00"); Log.v(TAG, "onStopClicked"); } btnStartPause.setText(startStr); break; case R.id.btnTest: myCurrentPeriod = 15; Log.v(TAG, "onTestClicked"); break; default: Toast toast = Toast.makeText(this, "Something wrong", Toast.LENGTH_SHORT); toast.show(); break; } } private void runTimer() { this.runOnUiThread(Timer_Tick); Log.v(TAG, "runTimer"); } private Runnable Timer_Tick = new Runnable() { @Override public void run() { myCurrentPeriod--; int minutes = (myCurrentPeriod%3600)/60; int secs = myCurrentPeriod%60; String time = String.format("%02d:%02d", minutes, secs); tv.setText(time); if (myCurrentPeriod == 0) { myTimer.cancel(); myCurrentPeriod = 1500; tv.setText("25:00"); btnStartPause.setText(startStr); Intent intent = new Intent(MainActivity.this, BreakActivity.class); intent.putExtra("task", etName.getText().toString()); startActivity(intent); Log.v(TAG, "start BreakActivity"); } } }; }