Please Enable JavaScript!
Gon[ Enable JavaScript ]

안드로이드(Android) activity 에서 activity 로 Object 넘기기

안드로이드 개발
반응형

안드로이드(Android) activity 에서 activity Object 넘기기

 

개발환경 : window 7 64bit, Eclipse Kepler, Android 4.2.2

 

Activity 로 데이터를 전달하기 위해서 쓰이는 방법에 대한 기술이다.

결과값을 받지 않는 경우와 결과값을 받는 두가지 경우가 있는데

비동기로 이루어지고 있다. 결과값을 받는 경우는 어떻게 처리 하는지

간단하게 예제를 통해 보여준다.

 

1. activity 로 결과값 전송하기

 

하나의 activity 에서 다른 activity 를 실행할 때 필요한 데이터를 넘기는 경우가

있다. 이럴때 getter, setter 가 있는 VO 객체를 만든후 넘긴다.

이번 예제는 파일 브라우저에서 txt 파일을 클릭해서 다른 activity 로 넘길 때

파일 정보를 넘기는 것이다.

 

import java.io.Serializable;

public class FileInfo implements Serializable {

	private static final long serialVersionUID = 1L;
	
	private String absolutePath;
	private String filename;
	private boolean bFile; // 파일인지 폴더인지 구분
	
	public String getAbsolutePath() {
		return absolutePath;
	}
	public void setAbsolutePath(String absolutePath) {
		this.absolutePath = absolutePath;
	}
	public String getFilename() {
		return filename;
	}
	public void setFilename(String filename) {
		this.filename = filename;
	}
	public boolean isbFile() {
		return bFile;
	}
	public void setbFile(boolean bFile) {
		this.bFile = bFile;
	}
	
}

다음은 VO 객체를 보내는 곳의 소스이다.

Intent 객체를 new 로 생성할 때 첫번째 파라미터로 보내는곳의 Acvitity , 두번째

파라미터로 받는 곳의 Activity 를 추가해서 생성한다.

intent 함수중에 putExtra를 이용해서 보내게 된다. 함수의 종류를 보게

되면 다양하고 많은 것들이 있음을 알수 있다. Object 를 보내게 되면 받는 곳에서

캐스팅 하면 된다. 마지막에 startActivity 함수를 호출해 준다.

FileInfo fileInfo = new FileInfo();
fileInfo.setAbsolutePath(aDirectory.getAbsolutePath());
fileInfo.setFilename(aDirectory.getName());
fileInfo.setbFile(true);

Intent intent = new Intent(AndroidFileBrowser.this, FileTextView.class);
intent.putExtra("fileText", fileInfo);
startActivity(intent);

 

호출을 하였으니 이제 받는 Activity 에서 어떻게 해야 하는지 보도록 하자.

받는 곳에서는 getIntent() 함수를 이용해 Intent 객체를 리턴받는다.

그리고 Intent 함수중에 getSerializableExtra 를 이용해 전달한 오브젝트를

캐스팅해 받는다.

 

// 다른 Activity 에서 전달해준 Intent 를 받는다
Intent intent = getIntent();
FileInfo fileInfo = (FileInfo)intent.getSerializableExtra("fileInfo");

 

2. activity 로 데이터 전송후 결과값 리턴받기

 

다음은 객체를 전달하고 전달한 Activity 로부터 결과값을 받는 방법은 무엇일까?

전달만 해주고 나 몰라라 해주면 좋겠지만 그 결과값을 알아야 하는 경우가

많다. 그럴때는 Intent 를 보내는 startActivity 가 아닌 startActivityForResult

사용하면 된다.

호출을 하였으면 전달 받을 함수가 있어야 한다. 그 함수가 onActivityResult 이다.

Override 해서 함수안에 필요한 기능을 넣자.

 

 

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// 결과 값을 전달 받는다. 
String ret = data.getStringExtra("retVal"); //다시 받온 값을 여기서 처리한다.
Log.d("return msg", ret);		
	super.onActivityResult(requestCode, resultCode, data);
}

파라미터의 Intent data 로부터 결과값을 받을수 있다. 아래 소스에서 보면

다 처리한후 결과값을 "success" 를 보냈다. 그러면 데이터를 보낸쪽으로 받은

결과로 로그에 "success" 가 찍힐 것이다.

 

받는 Activity 에서 Intent 를 설정하고 종료하는 소스이다.

setResult 파라미터로 RESULT_OK 를 넘겨준다. 그리고 finish() 를 호출해

Activity 종료하면 이전 호출한 곳으로 넘어가게 된다.

 

// 다른 Activity 에서 전달해준 Intent 를 받는다
Intent intent = getIntent();
FileInfo fileInfo = (FileInfo)intent.getSerializableExtra("fileInfo");
        
// 받고 리턴해주면서 종료한다
Intent retIntent = new Intent();
retIntent.putExtra("retVal", "success");
setResult(RESULT_OK,retIntent);
finish();
반응형
Posted by 녹두장군1
,