안드로이드에서 액티비티간 데이터 전달


안드로이드에서 액티비티간 데이터를 전달하는 방법은 아래와 같이 여러 가지가 있다.

 

  • Intent 사용
  • Shared Preferences 사용
  • 전역변수 사용

 

더 있을것 같지만 당장 떠오르지는 않고, 이 글에서 중요한 건 인텐트(Intent)다. 왜냐하면 인텐트를 사용하여 데이터를 전달할 것이기 때문이다. 

인텐트는 안드로이드의 컴포넌트(액티비티, 서비스 등)들 간의 통신을 담당한다. 그래서 액티비티를 전환할 때 인텐트를 사용하게 되는데, 이때 인텐트에 데이터를 실어서 보낼 수 있다.

전역 변수나 Shared Preferences는 액티비티들이 공유 메모리에 있는 데이터를 꺼내 쓰는 개념이지만 인텐트는 A 액티비티에서 B 액티비티로 직접 데이터를 건네주는 방식이다.

 

 

인텐트를 사용한 데이터 전달 구현


액티비티는 SendActivity와 ReceiveActivity 두개를 만든다. 어플을 실행하면 나타나는 SendActivity(일반적으로 MainActivity이며 이름을 MainActivity로 해도 무방하다)가 실행되자마자 사용자의 별다른 액션 없이 곧바로 ReceiveActivity로 액티비티가 전환된다. 액티비티가 전환될 때 SendActivity에서 ReceiveActivity로 데이터 전달도 이루어진다.

아래 예제는 최대한 간단하게 구현하고 싶어서 버튼을 누르면 SendActivity에서 ReceiveActivity로 전환되는 등의 액션을 생략했다.

 

SendActivity

package com.hydroponicglass.myapplication // 패키지명 수정 필요

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class SendActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_send)

        Log.d("Log","SendActivity")

        val intent = Intent(this,ReceiveActivity::class.java)
        intent.putExtra("key","12345") //key,전달할값

        startActivity(intent);
    }
}

putExtra 함수를 이용하여 데이터를 인텐트에 싣는다. putExtra의 첫 번째 인수는 키값으로 데이터의 고유 이름이다. 데이터를 받을 때 이 키값으로 받는다. 두 번째 인수는 전달할 값이다.

 

결과를 확인하기 위해 Log를 사용한다. 

2020.03.04 - [언어, 라이브러리/Android] - [Android, Kotlin] 안드로이드 디버깅을 위한 로그 출력하기

 

ReceiveActivity

package com.hydroponicglass.myapplication // 수정 필요

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class ReceiveActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_receive)

        Log.d("Log","ReceiveActivity")

        var data:String?
        data = intent.getStringExtra("key")
        
        Log.d("Log","value : " + data)
    }
}

getStringExtra를 이용하여 키값이 'key'인 데이터를 전달받았다. 데이터를 문자열로 입력받기 위해 getStringExtra를 사용했으나 getIntExtra, getCharExtra 등 다양한 자료형을 받을 수 있다.

 

AndoirdMenifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.hydroponicglass.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".ReceiveActivity"></activity>
        <activity android:name=".SendActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

SendActivity를 메인엑티비티로 지정하는 것 외에 달리 수정할 것은 없다.

 

 

Log

위 코드를 실행하면 곧바로 아래와 같은 로그를 얻을 수 있다.

D/Log: SendActivity
D/Log: ReceiveActivity
D/Log: value : 12345

 

 

데이터클래스를 이용한 액티비티간 데이터 전달


2021.06.08 - [언어, 라이브러리/Android] - [Android, Kotlin] 액티비티간 데이터클래스 전달