본문 바로가기
매일코딩/안드로이드

[안드로이드 기초] Serializable 과 Parcelable로 객체 데이터 넘기고 받기

by 인생여희 2017. 8. 15.
반응형

Serializable 과 Parcelable로 객체 데이터 넘기고 받기


#개념





#Parcelable 이용(Parcelable을 구현한 클래스 생성)

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package me.happygate.myapplication010;
 
import android.os.Parcel;
import android.os.Parcelable;
 
 
//객체 데이터를 전달해주기 위해서 Parcelabe 구현
public class SimpleData implements Parcelable {
 
    int number;
    String message;
 
    //생성자 만들기
    public SimpleData(int number, String message) {
        this.number = number;
        this.message = message;
    }
 
    //Parcel 데이터를 읽어서 변수에 할당
    //Parcel에서 Simple 데이터 안에 들어 있는 데이터 복원
    //Parcel은 데이터를 전달할 때 사용되는 객체다
    public SimpleData(Parcel src){
 
        number = src.readInt();
        message= src.readString();
    }
 
 
    //반드시 구현해야하는 변수
public static final Parcelable.Creator CREATOR = new Parcelable.Creator(){
 
        public SimpleData createFromParcel(Parcel in){
            return new SimpleData(in);
        }
 
        //배열 객체 만들어 주기
        public SimpleData[] newArray(int size) {
            return  new SimpleData[size];
        }
};
 
 
 
    @Override
    public int describeContents() {
        return 0;
    }
 
    // Parcel 객체로 써준다.
    //SimpleData가 Parcel로 바꿔준다
    @Override
    public void writeToParcel(Parcel dest, int flags) {
 
        dest.writeInt(number);
        dest.writeString(message);
 
    }
}
 
cs



#메인에서 데이터 던져주기

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package me.happygate.myapplication010;
 
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
 
import java.util.ArrayList;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        Button button=(Button)findViewById(R.id.button);
 
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
 
                //-----------객체 전달 방법1 Serializable---------------//
 
                //메뉴 엑티비티를 열 것이다.
                Intent intent =  new Intent(getApplicationContext(),MenuActivity.class);
 
                //데이터 담을 그릇 배열선언
                ArrayList<String> names = new ArrayList<String>();
                names.add("MIKE");
                names.add("JAME");
                names.add("DAVID");
 
                //데이터 전달
                intent.putExtra("names",names);
 
 
 
                //-----------객체 전달 방법2 Parcelable---------------//
 
                //SimpleData 객체 만들기
                SimpleData data = new SimpleData(100,"hello jone");
                //원래 객체를 넣을 수 없지만 Parcelable 을 구현한 클래스로 만든 객체는 넣을 수 있음
                intent.putExtra("data",data);
 
 
                //실행. 결과 확인
                startActivityForResult(intent,101);
            }
        });
    }
}
 
cs



#메뉴 화면에서 받기

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package me.happygate.myapplication010;
 
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
 
import java.util.ArrayList;
 
public class MenuActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);
 
 
 
        Button button2=(Button)findViewById(R.id.button2);
 
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
 
                finish();
 
            }
        });
 
 
        Intent passedIntent =getIntent();
        processIntent(passedIntent);
    }
 
    private void processIntent(Intent intent){
 
        if(intent != null){
            //객체 받기 방법 1
            ArrayList<String> names =(ArrayList<String>)intent.getSerializableExtra("names");
 
            if(names != null ){
 
                Toast.makeText(getApplicationContext(),"got data list:"+ names.size(),Toast.LENGTH_SHORT).show();
                 }
 
 
            //Parcelable을 구현한 클래스로 만든 객체 받기 - 방법 2
            SimpleData data = intent.getParcelableExtra("data");
            if (data != null) {
                Toast.makeText(getApplicationContext(),"got simpledata :"+data.message,Toast.LENGTH_SHORT ).show();
                }
            }
        }
    }
 
 
 
cs




반응형

댓글