[Android] Data transferring Method by using intent

12902 ワード

Intent


An Intent is a messaging object you can use to request an action from another app component. Although intents facilitate communication between components in several ways, there are three fundamental use cases: Starting an activity. An Activity represents a single screen in an app.
「コンテンツはメッセージング・オブジェクトです.他のアプリケーション・コンポーネントからアクションを取得できます.
たとえば、Intentを使用してActivityを実行するか、Intentを使用してMainActivityからSecondActivityに値を渡すことができます."
この文書では、アクティビティ間でデータを要求および受信する方法について説明します.
[MainActivityで値を渡す部分]
@override 
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // EditText 값을 참조해주겠습니다. SEND(보내기 버튼이 있다고 가정하고)
	messageText = findView(R.id.editText_main);
}
// "보내기" 버튼을 클릭했을때 함수입니다.
// 기본적으로 Intent를 생성해주었습니다. startactivity()로 값을 보내 SecondActivity 클래스를 가지고 올것이므로
// contenxt, 데이터 전달할 class를 지정해줍니다.
// 그리고 이제 실질적으로 데이터를 전달할 String 값을 저장해주는데 이때 getText() 메서드를 이용해
// EditText에 작성되어진 값을 받아오고 그 값을 .toString()값으로 변환하여 getMainEditText에 저장합니다.
// 만약 MainActivity -> SecondActivity 값만 전달한다면 즉 다시 리턴 받을 값들이 없다면
// 다시 말해 SecondActivity 쪽에서 다시 MainActivity로 줄 데이터가 없다면 startActivity()를 사용해 데이터를 넘겨주면 되지만
// 앞서 언급했듯 데이터를 송수신 하는 방법에 대해서 작성하고 있으므로 startActivityForResult() 메서드를 사용해줍니다.
// 이때 인자를 두개를 받는데 첫번째는 우리가 Intent 객체를 만들어 데이터를 불러올 값을 지정해주고 
// 두번째는 MainActivity -> SecondActivity로 요청할 '사용자 지정 코드'를 전달해줍니다.
public void sendFunction(View view){
	Intent secondActivityIntent = new Intent(this, SecondActivity.class);
	String getMainEditText = messageText.getText().toString();
	secondActivityIntent.putExtra(EXTRA_MESSAGE, getMainEditText);
    startActivityForResult(secondActivityIntent, TEXT_REQEST);
}
[SecondActivity受信値の部分]
@Override 
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.layout_second);
    // MainActivity 에서 주는 값을 Intent로 받기 위해서 getIntent를 지정해둡니다.
	Intent getIntent = getIntent();
	// 이제 이 getIntent를 가지고 어떤 값을 가지고 와야 되는지 명시해줍니다.
	// 이때 Intent를 통해 getStringExtra() 메소드를 통해서 가지고 오는데
    // MainActivity.EXTRA_MESSAGE는 우리가 위에서 putEXTRA() 메소드로 전달해줄때 사용했던
    // 키 값입니다. 즉 key:value 값으로 되어 있기 때문에 key : EXTRA_MESSAGE value: getMainEditText
	// 다시 말해 key 값을 통해서 값을 가지고 온다는 의미 입니다. 이때 key 값이 String 타입이기 때문에 getStringExtra()메소드를 사용한겁니다.
	String getMessage = getIntent.getStringEXtra(MainActivity.EXTRA_MESSAGE):
	// 그럼 이제 값도 다 받아왔기 때문에 SecondAcitivty 화면에 뿌려줄 차례만 남았습니다.
    // TextView를 연결해주고 setText()값으로 텍스트를 변경해줍니다.
	TextView textView = findViewById(R.id.text_view);
	textView.setText(getMessage);
}
[SecondActivityで異なる値を渡す部分]
replyText = findViewById(R.id.secondEditText);
public void returnReply(View view) {
	// reply 변수에 SecondActitivty에 연결해두었던 replyText에 작성되어진 String 값을
	// getText().toString() 값으로 받아와 저장해줍니다.
	String reply = replyText.getText().toString();
    // 이때 MainActivity에서는 안에 context, SecondActivity.class 가 있었는데 왜 없는지 의아하다면
	// 우리는 startActivity()를 다시 실행할 필요가 없기 때문이다.
	// 만약 SecondActivity에서 다른 Activity를 가지고 와야 될 필요가 있다면 MainActivity 에서 했던 것처럼
    // 명시해주어야 하겠지만
    // 따로 startActivity()를 하지 않아도 stack 상에 이전 MainActivity 가 있기 때문에 다시 호출 하지 않아도 된다.
	Intent deliverIntent = new Intent();
	// 이렇게 deliverIntent 객체를 생성해주고 putExtra 를 사용해서 여기에서 값을 전달해주겠다 라고 알리기 위한
    // 사용자 정의를 해주고 값을 넘겨줄 reply 를 작성해준다.
	// setResult() 를 통해서 RESULT_OK 는 Int 값으로 성공적으로 결과를 반환해주었다 라고 생각하면 된다.
	deliverIntent.putExtra(EXTRA_REPLY, reply);
    setResult(RESULT_OK, deliverIntent);
    finish();
}
// 그리고 나서 이제 MainActivity로 가서 onActivityResult() 메소드를 통해서 우리가
// MainActivity에서 지정해주었던 requestConde = TEXT_REQUEST, resultCode = RESULT_OK, 
// 우리가 SecondActivity에서 보내주었던 Intent data 값을 인자로 갖는다.
// 이렇게 요청한 코드와 결과값으로 보낸 코드가 같다면 이게 이해가 안간다면
// 전화를 생각해보면 된다. 우리가 요청한 핸드폰의 주소가 요청코드가 되고 받는 사람 코드가 RESULT_OK가 된다.
// 이렇게 조건이 충족한다면 Intent 값을 getStringExtra로 가져오고 해당 Intent 값의 맞는 key 값을 통해서 받아준다.
// 그렇게 하고 임의로 설정한 mReplyTextView (TextView) 의 setText()값을 이용해서 Text가 보여지는 부분을 바꿔준다.
if(requestCode == TEXT_REQUEST && resultCode == RESULT_OK) {
	String receiveData = data.getStringExtra(SecondActivity.EXTRA_REPLY)
    mRelyTextView.setText(recieveData);
}