title: Android: Using back button to main activity gives error forced close
body: <p>I have a mainActivity which is Customer.java with listview of 5 diff. activities. I was able to open all 5 activities when I tap them but when i press back button(the device backbutton) to go back to the mainAcitivity it would give me an error which you will see debug/logcat below the codes. I have post 2 examples activity below my main screen (logout and clockin) . </p>
  
  <p>Bonus: As one extra thing I would like to have is when click of the 'clockinActivity' button i want it to send the current time &amp; date to webserver(I already have customhttp class within my project) and automatically go back to main screen. </p>
  
  <p>I have read the </p>
  
  <p><a href="http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle" rel="nofollow">http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle</a></p>
  
  <p><a href="http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html" rel="nofollow">http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html</a></p>
  
  <p>Also this one doesn't seem to work</p>
  
  <pre><code>@Override
  public boolean onKeyDown(int keyCode, KeyEvent event)
  {
      if (keyCode == KeyEvent.KEYCODE_BACK)
      {
         //do smth
      }
      return super.onKeyDown(keyCode, event);
  }
  </code></pre>
  
  <p>Customer.java</p>
  
  <pre><code>import android.app.ListActivity;
  import android.content.Intent;
  import android.os.Bundle;
  import android.view.View;
  import android.widget.ArrayAdapter;
  import android.widget.ListView;
  import android.widget.TextView;
  
  public class Customer extends ListActivity
  {
      TextView selection;
      CustomerListItem[] items = { 
              new CustomerListItem("Start Trip", StartTripActivity.class), 
              new CustomerListItem("Clock in", ClockinActivity.class), 
              new CustomerListItem("Customer Svc", CustomerSvcActivity.class), 
              new CustomerListItem("Independent Inspection", InspectionActivity.class), 
              new CustomerListItem("Pick Up", PickUpActivity.class), 
              new CustomerListItem("Log Out", LogoutActivity.class)};
      private TextView resultsTxt;
  
      @Override
      public void onCreate(Bundle icicle)
      {
          super.onCreate(icicle);
          setContentView(R.layout.main);
          setListAdapter(new ArrayAdapter&lt;CustomerListItem&gt;(
                  this, android.R.layout.simple_list_item_1, items));
          selection = (TextView) findViewById(R.id.selection);
      }
  
      @Override
      protected void onListItemClick(ListView l, View v, int position, long id)
      {
          super.onListItemClick(l, v, position, id);
          final Intent intent = new Intent(this, items[position].getActivity());
          startActivityForResult(intent, position);
      }
  
      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent intent)
      {
          super.onActivityResult(requestCode, resultCode, intent);
          if (resultCode == RESULT_OK)
          {
              // Perform different actions based on from which activity is
              // the application returning:
              switch (requestCode)
              {
                  case 0:
                      // TODO: handle the return of the StartTripActivity
                      break;
                  case 1:
                      // TODO: handle the return of the ClockinActivity
                      break;
                  case 2:
                      // TODO: handle the return of the CustomerSvcActivity
                  case 3:
                      // TODO: handle the return of the InspectionActivity
                      break;
                  case 4:
                      // TODO: handle the return of the PickUpActivity
                      break;
                  case 5:
                      // TODO: handle the return of the LogoutActivity
                      break;
                  default:
                      break;
              }
          }
          else if (resultCode == RESULT_CANCELED)
          {
              resultsTxt.setText("Canceled");
          }
      }
  }
  </code></pre>
  
  <p>ClockinActivity.java</p>
  
  <pre><code>import java.util.Date;
  import android.app.Activity;
  import android.content.Intent;
  import android.os.Bundle;
  import android.view.View;
  import android.widget.Button;
  import android.widget.TextView;
  
  
  
  public class ClockinActivity extends Activity {
      @Override
      public void onCreate(Bundle savedInstanceState) { 
          super.onCreate(savedInstanceState);
          setContentView(R.layout.clockin);
          Thread myThread = null;
  
  
  
          Runnable runnable = new CountDownRunner();
         myThread= new Thread(runnable);   
          myThread.start();
  
     }
  
     public void doWork() {
  
     runOnUiThread(new Runnable() {
         public void run() {
             try{
         TextView txtCurrentTime= (TextView)findViewById(R.id.lbltime);
                     Date dt = new Date();
                     int hours = dt.getHours();
                     int minutes = dt.getMinutes();
                     int seconds = dt.getSeconds();
                     String curTime = hours + ":"+ minutes + ":"+ seconds;
                     txtCurrentTime.setText(curTime);
         }catch (Exception e) {
  
         }
         }
     });
  
     }
  
     class CountDownRunner implements Runnable{
         // @Override
         public void run() {
                 while(!Thread.currentThread().isInterrupted()){
                     try {
                     doWork();
                         Thread.sleep(1000);
                     } catch (InterruptedException e) {
                             Thread.currentThread().interrupt();
                     }catch(Exception e){
                     }
                 }
  
  
  
  Button btn = (Button) findViewById(R.id.btn_OK);
  
  //---event handler for the OK button---
  btn.setOnClickListener(new View.OnClickListener() 
  {
      public void onClick(View view) {
          Intent data = new Intent();
  
          //---get the EditText view--- 
  //        EditText txt_username = 
  //            (EditText) findViewById(R.id.txt_username);
  
          //---set the data to pass back---
         // data.setData(Uri.parse(
             // txt_username.getText().toString()));                           
          setResult(RESULT_OK, data);
  
          //---closes the activity---
          finish(); 
      }
  });  
  }
  }
  }
  </code></pre>
  
  <p>Logout.java</p>
  
  <pre><code>import android.app.Activity;
  import android.content.Intent;
  import android.os.Bundle;
  import android.view.View;
  import android.view.View.OnClickListener;
  import android.widget.Button;
  import android.widget.EditText;
  import android.widget.TextView;
  
  
  
  public class LogoutActivity extends Activity {
      private Button btnLogout;
      private Button btnCancel;
      private TextView lblResult;
      private EditText code;
      @Override
      public void onCreate(Bundle savedInstanceState) { 
          super.onCreate(savedInstanceState);
          setContentView(R.layout.logout);
  
          code = (EditText)findViewById(R.id.codeout);
          btnLogout = (Button) findViewById(R.id.submit);
          btnCancel = (Button) findViewById(R.id.cancel);
          lblResult = (TextView)findViewById(R.id.result);
  
          btnLogout.setOnClickListener(new OnClickListener(){
  
              @Override
              public void onClick(View v) {
                  // TODO Auto-generated method stub
                  String logout = code.getText().toString();
  
                  if (logout.equals("99999")){
                      lblResult.setText("Logout successful");
  
                      Intent i = new Intent(getApplicationContext(), Login.class);
                      startActivity(i);
                  } else {
                      lblResult.setText("Logout failed");
  
                  }
              }
          });
  
           btnCancel.setOnClickListener(new OnClickListener() {
  
              @Override
              public void onClick(View v) {
  
                  Intent i = new Intent(getApplicationContext(), Customer.class);
                  startActivity(i);
  
              }
  
      });
  
  
  }}
  </code></pre>
  
  <p>LogCat</p>
  
  <p>05-19 21:52:51.586: WARN/ActivityManager(58): Launch timeout has expired, giving up wake lock!
  05-19 21:52:51.586: WARN/ActivityManager(58): Activity idle timeout for HistoryRecord{45108f08 com.merrill/.Customer}
  05-19 21:52:56.799: WARN/ActivityManager(58): Activity destroy timeout for HistoryRecord{4510cf30 com.merrill/.Clockin}</p>
  
  <p>Debug</p>
  
  <p>ActivityThread.deliverResults(ActivityThread$ActivityRecord, List) line: 3515<br>
  ActivityThread.handleSendResult(ActivityThread$ResultData) line: 3557<br>
  ActivityThread.access$2800(ActivityThread, ActivityThread$ResultData) line: 125 
  ActivityThread$ResultData(ActivityThread$H).handleMessage(Message) line: 2063<br>
  ActivityThread$H(Handler).dispatchMessage(Message) line: 99 
  Looper.loop() line: 123 
  ActivityThread.main(String[]) line: 4627<br>
  Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]<br>
  Method.invoke(Object, Object...) line: 521<br>
  ZygoteInit$MethodAndArgsCaller.run() line: 868<br>
  ZygoteInit.main(String[]) line: 626 
  NativeStart.main(String[]) line: not available [native method]  </p>