늘 겸손하게

안드로이드 activity간 데이터 주고 받기 본문

Programming/Android

안드로이드 activity간 데이터 주고 받기

besforyou999 2021. 8. 5. 17:40

 

안녕하세요 besforyou입니다

 

이번 글에서는 activity 간 데이터를 주고받는 방법에 대하여 소개하겠습니다

 


Activity 호출과 함께 데이터 전달

 

MainActivity에서 아래와 같은 데이터가 있다고 가정합시다.

 

1
String data_to_send = "Hello world! I want to be rich!";
cs

 

secondActivity라는 액티비티를 생성하면서 위의 데이터를 전달해야 한다면

 

 

1
Intent intent = new Intent(MainActivity.this, secondActivity.class);
cs

 

우선 Intent를 생성하고

 

1
intent.putExtra("data", data_to_send);
cs

 

intent의 putExtra 메소드로 전달할 데이터의 key와 전달할 데이터를 인자로 넣어둡니다.

 

1
startActivity(intent);
cs

 

그 후에 secondActivity를 실행시키고

 

 

secondActivity에서

 

getIntent() 메소드로 intent를 가져옵니다.

 

1
Intent intent = getIntent();
cs

 

 

그 후에 intent의 getStringExtra 메소드에 전달한 데이터의 key를 인자로 넣어주면 전달한 데이터를 받아올 수 있습니다.

 

1
String device_info = intent.getStringExtra("device_info");
cs

 

 


 

Activity로부터 데이터 전달받기

 

 

먼저 activity를 실행할 때 startActivityForResult(intent, "..."); 로 액티비티를 실행시킵니다

 

 

1
2
3
4
5
6
7
8
9
public class MainActivity extends AppCompatActivity {
 
    ...
    ...
 
    Intent intent = new Intent(this, secondActivity.class);
    startActivityForResult(intent, 1234);
 
}
cs

 

두 번째 인자는 Request Code로 결과값을 주는 액티비티를 구분하기 위한 사용자 정의 코드입니다.

 

 

그 후 secondActivity에서 MainActivity에 전달할 데이터 data_to_send가 있다고 가정합시다.

 

1
String data_to_send = "q24qrkjgawgj";
cs

 

그런 뒤에 putExtra 메소드를 통해 전달할 데이터를 intent에 실은 후 setResult 메소드를 호출합니다.

 

1
2
3
4
5
6
7
8
String data_to_send = "q24qrkjgawgj";
 
Intent intent = new Intent(); // 다른 액티비티를 실행할것이 아니므로 빈 인텐드로 만들어 둠
intent.putExtra("data", data_to_send);
setResult(RESULT_OK, intent);
finish();
 
cs

 

finish() 메소드의 호출로 액티비티가 종료되면 해당 인텐트가 이전 액티비티(MainActivity)로 전달됩니다.

 

이전 액티비티인 MainActivity에서 onActivityResult 메소드를 Override 하여 데이터를 전달받을 수 있습니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class MainActivity extends AppCompatActivity {
    ...
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == 1234 && resultCode == RESULT_OK){
            String myData = data.getStringExtra("data");
            textView.setText(myData);
        }else{
            textView.setText("No Data");
        }
    }
    ...
}
cs