Android Intent를 이용한 Activity간 Data 공유

2020. 9. 7. 14:47 안드로이드/개발 TIP

안드로이드에서는 Activity간 Data 공유를 Intent라는 객체를 사용해서 구현한다. Intent는 명시적 Intent와 암시적 Intent가 있다. Intent에 대한 자세한 설명은 제외하고 이번 포스팅에서는 Intent를 사용해서 Activity간 Data 공유하는 방법을 설명한다.


PutActivity에서 이름, 나이 입력 후 Data객체 생성 후 GetActivity로 Data를 전송한다고 가정하자

1. PutActivity (데이터 전송 화면)

  • Data.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.woniper.example;
 
import java.io.Serializable;
 
public class Data implements Serializable {
 
    public String name;
    public int age;
 
    public Data() {}
 
    public Data(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
  • PutActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package com.woniper.example;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
 
public class PutActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        final EditText etName = (EditText)findViewById(R.id.et_name);
        final EditText etAge = (EditText)findViewById(R.id.et_age);
 
        Button btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name = etName.getText().toString();
                int age = Integer.parseInt(etAge.getText().toString());
                // Data 객체 생성
                Data data = new Data(name, age);
 
                // Intent에 Data객체 저장
                Intent intent = new Intent(PutActivity.this, GetActivity.class);
                intent.putExtra("data", data);
 
                // GetActivity로 Activity 전환
                startActivity(intent);
            }
        });
    }
}
  • put_activity.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

              android:orientation="vertical"

              android:layout_width="fill_parent"

              android:layout_height="fill_parent" >

    <EditText

            android:id="@+id/et_name"

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:hint="이름을 입력해주세요."/>

    <EditText

            android:id="@+id/et_age"

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:hint="나이를 입력해주세요."/>

    <Button

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:text="전송"

            android:id="@+id/btn"/>

</LinearLayout>


2. GetActivity (데이터 받아서 처리하는 화면)

  • GetActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.woniper.example;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
 
public class GetActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.get_activity);
 
        // Data 객체를 받을 Intent 생성
        Intent intent = getIntent();
        Data data = (Data)intent.getSerializableExtra("data");
 
        TextView txtName = (TextView) findViewById(R.id.txt_name);
        TextView txtAge = (TextView) findViewById(R.id.txt_age);
 
        // Data TextView에 적용
        txtName.setText("이름 : " + data.name);
        txtAge.setText("나이 : " + String.valueOf(data.age));
    }
}
  • get_activity.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

              android:orientation="vertical"

              android:layout_width="match_parent"

              android:layout_height="match_parent">

    <TextView

            android:id="@+id/txt_name"

            android:textSize="30sp"

            android:layout_width="match_parent"

            android:layout_height="wrap_content"/>

    <TextView

            android:id="@+id/txt_age"

            android:textSize="30sp"

            android:layout_width="match_parent"

            android:layout_height="wrap_content"/>

</LinearLayout>


3. AndroidManifest.xml (Activity 설정)

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

          package="com.woniper.example"

          android:versionCode="1"

          android:versionName="1.0">

    <uses-sdk android:minSdkVersion="19"/>

    <application android:label="@string/app_name" android:icon="@drawable/ic_launcher"

  android:theme="@android:style/Theme.Light">

<!--Main Activity(첫화면) -->

        <activity android:name="com.woniper.example.PutActivity"

                  android:label="@string/app_name">

            <intent-filter>

                <action android:name="android.intent.action.MAIN"/>

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

            </intent-filter>

        </activity>

        <activity android:name="com.woniper.example.GetActivity" />

    </application>

</manifest>

Activity는 AndroidManifest.xml이라는 애플리케이션 설정 파일에 적용되어 있어야 Activity간 전환이 가능하다.


4. 화면

  PutActivity화면                                     GetActivity화면

  


5. Intent Method

 Type

PUT 

GET 

 설명

 Object

 putExtra("object", Object) 

 getSerializableExtra("object")

 객체 전송, 반드시 Serializable을 상속

 String

 putExtra("string", "StringType")

 getStringExtra("string")

 문자열 전송

 Integer

 putExtra("int", 100)

 getIntExtra("int")

 int 타입 전송
 Long

 putExtra("long", 100L)

 getLongExtra("long")

 long 타입 전송
 Double

 putExtra("double", 100.123)

 getDoubleExtra("double")

 double 타입 전송
 Boolean

 putExtra("boolean", true)

 getBooleanExtra("boolean")

 boolean 타입 전송
 Bundle

 putExtra("bundle", Bundle)

 getBundleExtra("bundle") Bundle 객체 전송


Object객체와 Bundle객체를 제외하고는 기본으로 모든 DataType을 제공한다. 위 표에 제외된 Type도 있다.

출처 : https://blog.woniper.net/222?category=532432