Android(Java) - 객체 직렬화(Serializable) - 객체 자체를 다른 액티비티에게 데이터 전달하기

반응형

 

Serializable (직렬화)

클래스 정의시 뒤에 implements Serializable 정의

내부에서 사용되는 객체 데이터를 외부에서도 사용 할 수 있도록 해주는 것


Serializabl로 객체를 사용하는 이유

다른 액티비티에게 데이터 전달시 하나씩 정의 전달하는 방법

  • 단순히 간단히 사용 할 때에는 한개씩 하는 방법도 나쁘지 않음
String strData = "Hello";
String strData2 = "World";
intent.putExtra("Data1", strData);
intent.putExtra("Data2", strData2);

객체 자체에 여러가지 정보를 담아 다른 액티비티에게 데이터를 전달하는 방법

  • 여러가지의 데이터를 보낼 경우 하나하나 일일이 지정하지 않고 객체 자체에 정보를 담는 것이 유용
  • 예를 들면 회원가입시 회원의 정보를 일일이 지정하지 않고 member 라는 객체에 담아 전달하는 것이 편리
public class Data implements Serializable {
    public String strData, strData2;
}


data.strData = "Hello";
data.strData2 = "World";
intent.putExtra("Data", data);

객체 자체를 다른 액티비티에게 전달하기 (Android Studio)

기능 설계

  • MainActivity의 텍스트뷰를 클릭하면 SubActivity로 이동
  • 이동시 지정된 Hello, World 두 개의 문자열 변수 출력 (Toast 이용)

레이아웃 UI 설계

  • MainActivity

 

  • SubActivity


소스 코드

(소스는 사용방법과 이해를 돕기위해 소스 코드를 간소화하였으므로 따로 설명은 없습니다.)

  • Data.java
import java.io.Serializable;

public class Data implements Serializable {
    // 멤버 변수 strData, strData2
    public String strData, strData2;
}

 

  • MainActivity.java
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 텍스트뷰 객체 생성
        TextView tv = findViewById(R.id.textView);

        // 텍스트뷰 클릭시 이벤트, SubActivity로 이동
        tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
            	// Intent 객체 생성, Main -> Sub
                Intent intent = new Intent(MainActivity.this, SubActivity.class);
                
                // Data 클래스 객체 생성, data
                Data data = new Data();
                
                // Data 클래스의 객체 data의 멤버 변수에 값 입력
                data.strData = "Hello";
                data.strData2 = "World";
                
                // data 객체 자체를 다른 액티비티에게 전달
                intent.putExtra("data", data);
                
                // 액티비티 이동
                startActivity(intent);
            }
        });
    }
}

 

  • SubActivity.java
public class SubActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sub);
        
        // Data 클래스의 객체 생성, data
        Data data = new Data();
        
        // data 객체 자체를 getSerializableExtra 메소드로 전달 받음
        data = (Data) getIntent().getSerializableExtra("data");
        
        // 전달 받은 객체의 데이터 출력, HelloWorld
        Toast.makeText(getApplicationContext(), data.strData+data.strData2, Toast.LENGTH_LONG).show();
    }
}

실행 화면

  • 실행시 첫 화면

  • MainActivity 라고 쓰여진 텍스트뷰 클릭시 액티비티 이동하고 객체로 저장된 데이터 출력
    • strData=Hello / strData2=World

반응형