Json을 이용한 Activity 간의 Object 주고 받기

안드로이드에서 Activity 간에 Object를 주고 받아야 할 경우가 있다.

이런 경우에는 Object 를 Parseable 화 해야 하는데

이건 방법이 너무 복잡하다..

 

그래서 내가 주로 이용하는 방법은

[ Object 를 Json String 으로 만들어서 putExtra()를 이용해

타겟 Activity 에 보낸 후 다시 ObjectMapper 를 통해 String 를 Object   로 변환]

하는 방법이다.

1. 먼저ObjectMapper 클래스를 사용하기 위해

jackson 라이브러리를 다운받아 libs 폴더에 추가해준다.

다운로드는 http://jackson.codehaus.org  에서 받으면 된다.

최신은 1.9버전인데 난 1.8.1 버전을 사용한다~

 

2. Object 클래스 내에 JSONObject 로의 변환을 담당할 함수를 만들어준다.

난 Item 이라는 클래스 내에 다음과 같이 toJSON() 이라는 함수를 만들었다.

 

public String toJSON(){

	    JSONObject jsonObject= new JSONObject();
	    try {
	        jsonObject.put("name", name);
	        jsonObject.put("price", price);
	        jsonObject.put("size", size);
	        jsonObject.put("result", result);
	        jsonObject.put("imgId", imgId);
	        jsonObject.put("weather", weather);
	        jsonObject.put("onAlarm", onAlarm);

	        return jsonObject.toString();
	    } catch (JSONException e) {
	        e.printStackTrace();
	        return "";
	    }

	}

 

필수 : ObjectMapper 를 사용하기 위해서는 반드시 Setter 와 Getter 를 만들어 주자!

Tip. 이클립스에서는 Setter 와 Getter를 쉽게 만들 수 있게 도와준다.

Source – Generate Getters and Setters  를 선택하면 된다.

 

3. toJSON 함수를 만들었으니 이제 사용할 차례다.

타겟 Activity 를 호출 하는 부분의 소스는

Item item = new Item();
String jsonObject = item.toJSON();
Intent intent = new Intent(My.this, Target.class);
intent.putExtra("jsonData",jsonObject.toString());
startActivity(intent);

끝이다.

위와 같이 jsonObject.toString() 을 실행하면 다음과 같은 형식을 같은  문자열이 리턴된다. 

{“timeC”:41160000,”imgId”:2130837580,”result”:”고무나무껍질, 천연고무, 통나무 5개”,”workPoint”:”10″,”timeA”:41160000,”timeB”:28800000,”price”:”7은”,”name”:”고무나무”,”weather”:”열대”,”onAlarm”:false,”size”:”3×3″}

4. 이제 받는 쪽에서 String 형태의 JsonObject 를 다시 Object( 여기서는 Item 객체 )화 시켜야 한다.
받는 쪽 소스는 다음과 같다 .
ObjectMapper mObjMapper = new ObjectMapper().configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// ObjectMapper 선언. 뒤쪽의 configure부분은
//받는쪽 Object에 없는 항목을 맵핑해야 되는 경우에는
//무시하라는 설정이다. 이건 서버와의 통신에서 유용하게 쓰인다.
Item item = new Item(); // 넘어올 데이터를 담을 객체 선언
String jsonStringData = getIntent().getExtras().getString("jsonData");
// Intent 에서 jsonData 라는 key값으로 보내진 String 데이터를 추출.
item = mObjMapper.readValue(jsonData, Item.class);
// item객체에 맵핑.

끝.

 

 

진짜 끝이다.

 

너무 간단하지 않은가? ㅠ_ㅠ

 

이제 Activity 간의 통신을 어떻게 할까 고민하지 말자~ !ㅋ

 

 

Tip. 즐겨찾기 같은 기능을 구현 하는 것 처럼  Object 전체를 저장해야 될 필요가 있을때

위의 방법을 이용해  SharedPreferences 에 저장해서 사용하면 편리하다.