본문 바로가기

인텐트(Intent)로 데이터 전달(putExtra, getExtras)

반응형

인텐트(Intent)를 사용할 때 데이터를 전달하는 방법에 대해서 이야기 하겠다.

Intent로 다른 Activity(예, AnotherActivity.class)를 실행시킬 때는 다음과 같이 한다.
Intent intent = new Intent(getApplicationContext(), AnotherActivity.class);
startActivity(intent);

그런데, 여기에 추가로 AnotherActivity 데이터를 전달하고 싶을 때가 있다.
이때 사용할 수 있는 것이 putExtra() 다.
Intent intent = new Intent(getApplicationContext(), AnotherActivity.class);
intent.putExtra("name", "rio");
intent.putExtra("age", 10);
startActivity(intent);

그리고, AnotherActivity에서는 다음과 같이 getExtras()를 이용해서 데이터를 받을 수 있다.
(바로 데이터를 받을 것이므로 보통은 onCreate() 메서드에 구현 한다.)
Intent intent = getIntent();
String name = intent.getExtras().getString("name");
int age = intent.getExtras().getInt("age");



(*** 참고 1 ***)
startActivity() 가 아니고 startActivityForResult()를 사용한다면 다음과 같이 하면 된다.
public static final int REQUEST_CODE = 1001;

....

Intent intent = new Intent(getApplicationContext(), AnotherActivity.class);
intent.putExtra("name", "rio");
intent.putExtra("age", 10);
startActivityForResult(intent, REQUEST_CODE);

....​

protected void onActivityResult(int requetCode, int resultCode, Intent Data) {
  super.onActivityResult(requestCode, resultCode, Data);
     if(requestCode == REQUEST_CODE) {
        if(resultCode == RESULT_OK) {
           String phoneNumber = data.getExtras().getString("phoneNumber");
        }
     }
}

AnotherActivity에서 데이터를 넣는 부분을 보면
Intent resultIntent = new Intent();
resultIntent.putExtra("phoneNumber", "010-1234-5678");
setResult(RESULT_OK, resultIntent);

이 코드는 Activity 간의 데이터 전달을 가능하게 하는 코드이므로 유용하게 사용될 수 있다.
(REQUEST_CODE, RESULT_OK 부분에는 임의의 integer 값을 넣어도 된다.)


(*** 참고 2 ***)
startActivityForResult()와 setResult() 코드를 좀 더 고치면 다음과 같다.

상황 : 하나의 Activity에서 여러 Activity로 데이터를 주고 받아야 할 경우
public static final int REQUEST_CODE_FOR_ACTIVITY_1 = 1001;
public static final int REQUEST_CODE_FOR_ACTIVITY_2 = 1002;
....

startActivityForResult(intent, REQUEST_CODE_ACTIVITY_1);
​startActivityForResult(intent, REQUEST_CODE_ACTIVITY_2);
....​

protected void onActivityResult(int requetCode, int resultCode, Intent Data) {
  super.onActivityResult(requestCode, resultCode, Data);
        switch (requestCode) {
        case REQUEST_CODE_ACTIVITY_1:      
              if(resultCode == RESULT_OK && Data != null) {
                   // 결과가 OK 일 때 할일
              }else if(resultCode == RESULT_CANCELED) {
                   // 결과가 CANCEL 일 때 할일
              }
              break;
         case REQUEST_CODE_ACTIVITY_2:
              if(resultCode == RESULT_OK && Data != null) {
                   // 결과가 OK 일 때 할일
              break;
        }
}

반응형

댓글


Copyright ⓒ SmartWeb All rights reserved.