안녕하세요. 이번 시간에는 안드로이드에서 Intent로 객체를 전달하는 방법을 알아보도록 하겠습니다.
우선 기능을 구현하기 전에 해당 기능이 무엇인지 왜 사용하는지 짚고 구현을 해보겠습니다.
An Intent is a messaging object you can use to request an action from another app component.
안드로이드 공홈에 나와있는 인텐트의 정의입니다. 해석을 해보면 다른 안드로이드 컴포넌트에게 액션을 요청하는 메시지 객체로 알 수 있습니다. 안드로이드를 개발하면 액티비티에서 다른 액티비티로 이동하거나 서비스, 브로드캐스트 컴포넌트를 사용할 때 대게 해당 컴포넌트를 실행시키는 것 뿐만 아니라 데이터를 넘겨주고 싶은 경우가 있습니다. 이때 단순히 원시형 데이터 값 뿐만 아니라 객체를 전달하고 싶은 경우가 있습니다.
우선 Intent로 전달할 객체는 Serializable를 구현해야 합니다.
import java.io.Serializable;
// Intent로 전달할 클래스 정의
public class User implements Serializable{
String name;
String phoneNumber;
String address;
}
이렇게 사전에 정의한 User 클래스의 객체를 보내는 곳에서는 다음과 같이 작성해주면 됩니다.
User user = new User("StickCode", "010-0000-1111", "동작구"); // User 객체 생성
// NextActivity : 넘기고자 하는 Component
Intent intent = new Intent(this, NextActivity.class);intent.putExtra("object", user);
startActivity(intent);
//받는 곳
User user = (User) intent.getSerializableExtra("object"); // 직렬화된 객체를 받는 방법
전체 코드입니다.
MainActivity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
User user = new User("StickCode", "010-0000-1111", "동작구"); // User 객체 생성
Logger.d("MainActivity : user 주소값 :",user);
// NextActivity : 넘기고자 하는 Component
Intent intent = new Intent(this, NextActivity.class);intent.putExtra("object", user);
startActivity(intent);
}
}
NextActivity
public class NextActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_next);
Intent intent = getIntent();
User user = (User) intent.getSerializableExtra("object"); // 직렬화된 객체를 받는 방법
Logger.d("NextActivity : user 주소값 :",user);
Logger.v("User name :", user.name);
}
}
User
public class User implements Serializable {
String name;
String phoneNumber;
String address;
public User(String name, String phoneNumber, String address) {
this.name = name;
this.phoneNumber = phoneNumber;
this.address = address;
}
}
코드 중간중간에 보이는 Logger 라이브러리는 아래 포스팅을 이용하시면 해당 프로젝트에 편한게 적용하여 사용하실 수 있습니다.
https://stickode.tistory.com/257
https://stickode.com/detail.html?no=2519
결과
여기서 주의하실 점은 MainActivity와 NextActivity에서 생성한 user 객체가 같지 않다라는 것을 확인할 수 있습니다. 즉 데이터는 받아 오지만 객체를 공유할 수는 없으니 개발하실 때 행여나 같은 객체를 참조한다고 생각하시고 개발하지 않도록 합시다!
'안드로이드 자바' 카테고리의 다른 글
[JAVA][Android] 키보드 보이기/숨기기 (0) | 2022.02.20 |
---|---|
[JAVA][Android] URL과 DECODE 활용하기 (0) | 2022.02.18 |
[JAVA][Android] 이미지 넘겨보기 (0) | 2022.02.14 |
[JAVA][Android] 안드로이드 Lottie 사용법 (0) | 2022.02.13 |
[JAVA][Android] 꺾은 선 그래프 만들기 (0) | 2022.02.12 |