본문 바로가기
Back End/Android(

Adroid/ 액티비티(Activity) 간의 양방향 데이터 전달방법 Intent

by healingmau 2022. 7. 13.

 

액티비티(Activity) 간의 양방향 데이터 전달방법 Intent

 

 

 Activity(액티비티) 간 데이터 전달

Intent(인텐트)를 사용해야 합니다.

 

여기서 먼저 알아야 할점은~

Intent를 사용하기 위해서

Manifest.xml 코드 안에

액티비티를 추가해줘야 합니다.

 

        <activity
            android:name=".SecondActivity"
            android:exported="false" />
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

 

1.

MainActivity.java

먼저 메인 액티비티에서 

intent(인덴트)의 putExtra

데이터를 전달합니다.

 

// 새로운 액티비티를 띄우고,
// 데이터를 전달한다.
Intent intent = new Intent(MainActivity.this, SecondActivity.class);

intent.putExtra("email", email);
intent.putExtra("name", name);
intent.putExtra("age", age);
intent.putExtra("hidden", hiddenData);

 

putExtra("key", value) :

메소드에 키와 밸류 데이터 입력

 

。putExtra 첫번째 파라미터 :

넘겨주는 데이터 키(key) 값

 

。putExtra 두번째 파라미터 :

데이터가 들어있는 변수 지정

 

 

2.

MainActivity.java

두번째 액티비티에서

데이터를 전달받습니다.

 

getIntExtra, getStringExtra, getDoubleExtra

데이터 타입에 맞게 사용합니다.

 

String email = editEmail.getText().toString().trim();
String name = editName.getText().toString().trim();
String ageStr = editAge.getText().toString().trim();

int age = Integer.valueOf(ageStr).intValue();

double hiddenData = 3.1414;

 

Intent.putExtra("Key", value)

형식으로 데이터를 다음 액티비로

보낼수 있습니다.

 

getIntent()

보낸 intent 객체를 반환합니다.

 

getIntent().getStringExtra(name)

String 형식의 name의 값을 반환합니다.

 

getIntent().getIntExtra(name, default)

Int 형식의 name 값을 반환합니다.

값이 존재하지 않으면 default 값을

반환합니다.

 

 

3.

액티비티 간의 양방향

데이터 전달에는

두가지 방법이 있습니다.

 

a. startActivityForResult (사라질 예정)

b. ActivityResultLauncher 

 

MainActivity.java

 

ActivityResultLauncher<Intent> startActivityResult =
        registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
                new ActivityResultCallback<ActivityResult>() {
                    @Override
                    public void onActivityResult(ActivityResult result) {
                        // result 에는 resultCode 가 있다.
                        // resultCode 의 값으로, 여러가지 구분해서 사용이 가능.
                        if (result.getResultCode() == 0){
                           int age = result.getData().getIntExtra("age", 0);
                           editAge.setText(""+age);
                        }
                    }
                });


registerForActivityResult의

첫번째 파라미터에는 deprecated된

startActivityForResult

 

두번째 파라미터에는

ActivityResultCallback

(값을 넣으면!!

자동으로 오버라이드 됨)

 

result에는 resultCode가 있으며,

resultCode의 값으로

여러가지의 데이터타입을

구분해서 사용이 가능합니다.

 

 

4.

SecondActivity.java

 

두번째 액티비티에(Activity) 에서

버튼을 누르면 화면에서 입력한 데이터가

다시 메인 액티비티로 갈수 있도록

코드를 작성합니다.

 

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        // 1. 수정한 나이 데이터를 가져온다.
        String ageStr = editAge.getText().toString().trim();
        int age = Integer.valueOf(ageStr).intValue();

        // 2. 이 나이 데이터를 MainActivity에 전달한다.
        Intent intent = new Intent();
        intent.putExtra("age", age);
        setResult(0, intent);

        // 3. 이 액티비티는 종료한다.
        finish();
    }
});

 

EditText 에 있던 데이터를

getText 와 toString 으로

문자화하여 가져옵니다.

 

문자화 된 데이터는 

valueOf 와 intValue 를 통해

다시 정수로 바꿉니다.

 

Intent 객체를 생성하고,

putExtra 로 전달!

 

마지막에 액티비를 종료하기!

finish() 로 창을 닫아줍니다.

 

 

 

힐링아무의 코딩일기 힐코딩!!

댓글