이 ArrayCollection 참 이상하네요-_-;
참 다루기 힘드네요. ^^
우선 http://localhost:8080/list.jsp 하면 아래와 같은 형태를 출력한다고 칩시다.
[code]<?xml version="1.0" encoding="UTF-8"?>
<result_set>
<record>
<id>mudchobo</id>
<username>성종천</username>
</record>
<record>
<id>idoori</id>
<username>임두리</username>
</record>
</result_set>
[/code]
잘 보시면 result_set태그안에 record태그가 2개가 있네요.
요 데이터를 가져와서 ArrayCollection에 저장하고 싶습니다.
그러면 이렇게 하면 됩니다. HTTPService의 result속성이 resultHandler라고 칩시다.
[code]public var recordAC:ArrayCollection;
public function resultHandler(event:ResultEvent):void {
recordAC = (event.result.result_set.record is ArrayCollection) ?
event.result.result_set.record as ArrayCollection :
new ArrayCollection(ArrayUtil.toArray(event.result.result_set.record));
}
[/code]
저렇게 하는 이유는....만약 record가 1개라고 칩시다.
그러면 event.result.result_set.record as ArrayCollection 해버리면 recordAC변수에 null이 들어갑니다.
Array로 인식안하고 하나의 객체로 인정해서 ArrayCollection으로 변환을 못하는 것 같습니다-_-;
사실 왜그런지 정확한 이유는 모르겠군요. 디버그를 해보니까 record가 2개면 record에 [0], [1] 이렇게 나뉘는데 record가 1개면 [0], [1]이런거 없고 바로 id, username 이렇게 나오더군요. 배열로 생각안하고 그냥 객체로 생각해서 저런 것 같습니다-_-;
그래서 저렇게 변환이 가능한지 물어보면 되고, 1개의 record가 있으면 변환이 불가능하기 때문에
ArrayUtil.toArray를 쓰면 됩니다.
그리고 저렇게 해줘야하는 이유가 그냥 ArrayUtil.toArray로 받아오면 나중에 해당 객체를 가져올 때 이상해지더라구요-_-; recordAC.getItemAt(0); 해서 0번째 Object를 가져오면 Object를 열어보면 [0][1] 이 있어서 배열이 들어가 있어요. 그래서 배열로 된 건 ArrayUtil.toArray로 가져오면 안되더라구요 ^^
저렇게 as ArrayCollection으로 가져오면 var obj:Object = recordAC.getItemAt(0); 한다음에
obj.name 하면 name속성에 접근할 수 있어요^^
'null에러'에 해당되는 글 1건
- 2007.12.01 [FLEX] HTTPService가 출력한 XML을 ArrayCollection에 넣기! null에러해결법! (12)
댓글을 달아 주세요
고생^^
누구지?-_-;
그렇지 않아도 이것때문에 프로그램을 다시 짜야하나 고민하고 있었습니다.
많은 도움이 되었습니다.
퍼갑니다.
도움이 되셨다니 다행입니다. ^^
감사합니다. 정말 이것때문에 고생하고 있었는데...^^
도움이 되셔서 다행이에요~ ^^
저도 flex처음 입문할 때 겪었던.....-_-
맞습니다.. 하나일때 배열이 아니라 걍 객체로 인식합니다.. 오늘 아침부터 삽질을 ㅎㅎ;;
아넵 ^^
그렇더라구요. 다른 방법 알고 계심 저도 ....-_-
해당글을 보고 하다가 질문이있습니다^^ㅎ;
httpService로 xml을 받아왔는데요 이때 resultFormat이 xml로 하였는데.. 안되더군요.
그래서 resultFormat을 object로 변경해주었더니 arrayCollection에 잘넣었습니다.
resultFormat을 xml로 해서 받아올때
ac = (XML(event.result)..row is ArrayCollection) ?
XML(event.result)..row as ArrayCollection :
new ArrayCollection(ArrayUtil.toArray(XML(event.result)..row));이렇게 가져와arrayCollection에 넣었더니 전체가 한번에 들어가서 사이즈가 1로 나오네요..
xml 포멧으로 가져왔을때 arrayCollection에 어떻게 담을수 있을까요?ㅠㅠ
궁금합니다^^
머드님~ 항상잘보고있습니다. 감사합니다.
result값 받아서 아마 파싱하셔서 넣으셔야할겁니다 ㄷㄷ
그리고 xml을 자동으로 array로 변환해주는 게 있는걸로 알고 있는데
저도 안해본지 오래되어서ㅠㅠ
역시 머드초보님 글엔 좋은 정보가 많네요.
Flex 접은지 몇년만에 다시 잡게 됐네요.ㅠ
아 저도 flex는 접어서....방문해주셔서 감사합니다^^