본문 바로가기

Programming/Android

인텐트(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;

        }

}