일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 클릭중복방지
- 안드로이드 스튜디오
- 오류해결
- 권한추가
- 카카오 로그인 구현하기
- Android
- Parcelable 인터페이스
- 네이티브 키
- 액티비티간 데이터전달
- 해시키 추출
- Android Studio Parcelable
- 개발자
- 안드로이드 싱글
- 태스크정리
- Android 클릭추상화
- 안드로이드
- android studio
- Kong돌이
- Toast
- 인터넷권한
- 자바
- 카카오로그인API
- 안드로이드원클릭
- boolean getBooleanExtra()
- 안드로이드스튜디오
- Android 클릭이벤트
- 로그인API연동
- 안드로이드액티비티간데이터통신
- 프로세스와 태스크
- 이클립스
- Today
- Total
Kong돌이의 코딩이야기
Android Studio Parcelable 객체를 이용한 액티비티 간 데이터 전달 예제 본문
안녕하세요 오늘은 Android Studio Parcelable 객체를 이용하여 액티비티 간 데이터 전달하는 예제를 한번 진행해보려고 합니다!! 액티비티 간 데이터 전달은 굉장히 중요하죠! 예를 들어 로그인 후 로그인 화면에서 메인 화면으로 넘어갈 때 아이디 또는 이름 같은 경우를 사용자에게 노출시켜줘야 할 경우가 많습니다. 이런 경우 Parcelable 객체를 이용하여 데이터를 전달 할 수 있습니다. 시작해 볼까요?
우선 Android Studio 새로운 프로젝트를 생성해주세요
저희가 처음에 만들어야 할 건 main_Activity와 menu_Activity 그리고 SimpleData라는 new Java Class를 생성해주세요!!
다 만드셨나요?? 그럼 이제 SumpleData 클래스에 들어가 Parcelable 인터페이스를 구현해보겠습니다!!
다음과 같이 소스코드를 구현해주세요! 설명은 소스코드와 함께 있습니다!
package com.example.sampleparcelable;
import android.os.Parcel;
import android.os.Parcelable;
public class SimpleData implements Parcelable {
// Parcelable 인터페이스를 구현
int number; //number, message 2가지의 변수를 지정해주었음
String message; // number = 정수 message = 문자열
public SimpleData(int num, String msg){
number = num;
message = msg;
}
// Parcel 객체에서 읽기 (생성자)
protected SimpleData(Parcel src) {
number = src.readInt();
message = src.readString();
// Parcel 객체를 파라미터로 받게 된다.
// 위 두가지 readInt, readString 메서드를 이용하여 데이터를 읽어들임
}
// Creator 객체는 상수로 정의되어 있으며 새로운 객체가 만들어지는 코드가 들어가므로
// new = Creator<SimpleData>와 같이 SimpleData객체를 만드는 부분을 볼 수 있다.
public static final Creator<SimpleData> CREATOR = new Creator<SimpleData>() {
@Override
public SimpleData createFromParcel(Parcel in) {
return new SimpleData(in); // -- SimpleData 생성자를 호출해 Parcel 객체에서 읽기
}
@Override
public SimpleData[] newArray(int size) {
return new SimpleData[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) { //-- Parcel 객체로 쓰기
// writeToParcel = SimpleData 객체안에 들어있는 데이터를 Parcel 객체로 만드는 역할을 해줌
// 이 메서드 안에서는 writeInt(), writeString() 2가지의 메서드를 사용함
dest.writeInt(number);
dest.writeString(message);
}
}
// 마무리 코멘트 결과적으로 SimpleDAta클래스 안에 Parcel 객체의 데이터를 읽는 부분과
// Parcel 객체로 쓰는 부분을 정의하게 된다.
이제 MainActivity 소스 코드를 작성해 볼 텐데요 MainActivity.java파일을 열고 버튼을 클릭했을 때 MenuActivity를 뛰우는 코드를 추가합니다. MenuActivity를 띄우기 위해 만드는 인텐트 객체에는 SimpleData 객체를 부가 데이터로 넣어 전달할 것입니다. MainActivity 클래스 안에 다음과 같은 코드를 입력해주세요!!
package com.example.sampleparcelable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
public static final int REQUEST_CODE_MENU = 101;
public static final String KEY_SIMPLE_DATA = "data";
Button btn_menu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_menu = findViewById(R.id.btn_menu);
btn_menu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
SimpleData data = new SimpleData(100, "내이름은 콩진석!");
// SimpleData 객체 생성
// 클래스로 객체를 만드는 부분입니다. 이 부분을 보시면 new SimpleData(100, 내 이름은 ...)
// 로 되어 있습니다. 따라서 정수는 100 문자열은 내 이름... 인 Parcel 객체로 만들어집니다.
intent.putExtra(KEY_SIMPLE_DATA, data);
// 인텐트에 부가 데이터로 넣기
// 인텐트 객체의 putExtra 메서드를 사용해 SimpleData 객체를 부가 데이터로 추가했다면
// SimpleData 객체는 메뉴 액티비티에서 꺼내어 사용할 수 있다.
startActivityForResult(intent, REQUEST_CODE_MENU);
// stratActivityForResult()를 활용
}
});
}
}
마지막으로 메뉴 화면 소스코드를 작성해보도록 하겠습니다.
MenuActivity XML 레이아웃 파일인 Activity_menu.xml 파일을 열고 텍스트뷰 하나와 버튼 하나를 추가해주세요!!
텍스트뷰에는 "전달받은 데이터"라는 글자가 보이도록 text 속성을 설정합니다.
텍스트뷰에는 MainActivity로부터 전달받은 데이터를 보여줄 것입니다.
소스코드와 함께 설명 진행하도록 하겠습니다.
package com.example.sampleparcelable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MenuActivity extends AppCompatActivity {
public static final String KEY_SIMPLE_DATA = "data";
TextView tv_menu;
Button btn_back;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
tv_menu = findViewById(R.id.tv_menu);
btn_back = findViewById(R.id.btn_back);
btn_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.putExtra("name", "mike");
setResult(RESULT_OK, intent);
finish();
}
});
// 메뉴 엑티비티로부터 전달 받은 인텐트 객체를 참조하기 위해 onCreate 메서드 안에서
// getIntent() 메서드를 호출 했습니다. getIntent() 메서드를 호출하면 인텐트 객체가 반환되므로
// 이 객체 안의 번들 객체를 참조할 수 있습니다.
Intent intent = getIntent();
procesIntent(intent);
}
private void procesIntent(Intent intent) {
if(intent != null) {
// getExtras() 메서드를 호출하면 Bundle 자료형의 객체가 반환됩니다.
// 이렇게 객체를 참조한 후 getOOO() 형태의 메서드를 사용해도 되고, 번들 객체를 참조하지 않고
// 인텐트 객체에 정의되어 있는 getOOOExtra()형태의 메서드를 사용해도 됩니다.
Bundle bundle = intent.getExtras();
SimpleData data = bundle.getParcelable(KEY_SIMPLE_DATA);
// 번들 객체안에 SimpleData 객체가 들어 있으므로 getParcelable 메서드로 객체를 참조합니다.
// 번들 객체에 데이터를 저장하기 위한 키(KEY)는 메인 액티비티와 또 다른 액티비티 모두
// KEY_SIMPLE_DATA라는 같은 이름의 상수로 정의되어 있습니다.
if (intent != null) {
tv_menu.setText("전달 받은 데이터\nnNumber :" + data.number
+ "\nMessage : " + data.message);
// 텍스트에 전달 받은 Number과 Message를 보여줍니다.
}
}
}
}
이제 main_Activity와 menu_Activity 그리고 SimpleData라는 new Java Class에 들어갈 소스코드를 다 작성했으니 앱을 실행하도록 하겠습니다!!
MainActivity 화면입니다. 메인 액티비티의 [메뉴 화면 띄우기] 버튼을 누르게 되면 새로 추가한 메뉴 화면이 뜹니다.
그리고 화면에는 인텐트 안의 번들 객체에 넣어 전달한 SimpleData객체의 정보가 나타납니다. 버튼을 클릭해보겠습니다!!
자 이렇게 Parcelable 인터페이스를 사용하면 객체를 정의해 데이터를 전달할 수 있으므로 코드가 좀 더 단순해지고 재사용성이 높아지는 장점이 생기게 됩니다. 하지만 데이터를 담아둘 새로운 객체를 일일이 정의하는 것이 번거롭다는 단점도 있습니다.
Android Studio Parcelable 객체를 이용한 액티비티 간 데이터 전달 예제를 진행해 보았습니다.
이상으로 마치도록 해보겠습니다.!!
'코딩이야기 > 안드로이드' 카테고리의 다른 글
Android Studio 카카오로그인API 연동하기(JAVA) 예제 (1) | 2021.09.02 |
---|---|
Android Studio 태스크 관리 이해하기 정리 (0) | 2021.08.31 |
Android Studio 부가 데이터(Extra Data) 정리 (0) | 2021.08.30 |
Android Studio 플래그 정의 (0) | 2021.08.28 |
Android Studio 액션과 데이터를 활용한 전화걸기 예제 (0) | 2021.08.26 |