¿Qué es la intención de los parámetros onActivityResult?

Aquí está mifirst activity código de donde llamo elsecond Activity:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
  if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT){       
    startActivityForResult(new Intent("chap.two.Chapter2Activity2"),request_Code);          
  }    
  return false;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  if (requestCode == request_Code) {
    if (resultCode == RESULT_OK) 
      Toast.makeText(this,data.getData().toString(),Toast.LENGTH_SHORT).show();             
  }
}

Y aquí hay un código dechap.two.Chapter2Activity2:

Button n = (Button) findViewById(R.id.btn_OK);
n.setOnClickListener(new View.OnClickListener() {               
   @Override
   public void onClick(View v) {
     // TODO Auto-generated method stub

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

   }
});

aqui veo esosetResult(RESULT_OK, data) tiene dos argumentos pero
onActivityResult(int requestCode, int resultCode, Intent data) tiene tres y quiero saber comoonActivityResult obtiene valor para el tercer parámetro? ¿Cómo funciona alguien puede decirme? ¿Por qué no es este error?

Respuestas a la pregunta(2)

Su respuesta a la pregunta