'Arraycollection'에 해당되는 글 1건

  1. 2007.12.01 [FLEX] HTTPService가 출력한 XML을 ArrayCollection에 넣기! null에러해결법! (12)
 

이 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속성에 접근할 수 있어요^^

 
Posted by 머드초보

댓글을 달아 주세요

  1. ㅌㅌ 2008.01.29 10:09  댓글주소  수정/삭제  댓글쓰기

    고생^^

  2. 익명의개발자 2008.11.24 15:52  댓글주소  수정/삭제  댓글쓰기

    그렇지 않아도 이것때문에 프로그램을 다시 짜야하나 고민하고 있었습니다.
    많은 도움이 되었습니다.
    퍼갑니다.

  3. BlogIcon 쥬탱이 2009.07.24 10:41  댓글주소  수정/삭제  댓글쓰기

    감사합니다. 정말 이것때문에 고생하고 있었는데...^^

    • 머드초보 2009.08.07 23:31  댓글주소  수정/삭제

      도움이 되셔서 다행이에요~ ^^
      저도 flex처음 입문할 때 겪었던.....-_-

  4. BlogIcon 수달스 2009.10.16 13:36  댓글주소  수정/삭제  댓글쓰기

    맞습니다.. 하나일때 배열이 아니라 걍 객체로 인식합니다.. 오늘 아침부터 삽질을 ㅎㅎ;;

  5. 남스 2010.10.01 09:07  댓글주소  수정/삭제  댓글쓰기

    해당글을 보고 하다가 질문이있습니다^^ㅎ;
    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에 어떻게 담을수 있을까요?ㅠㅠ
    궁금합니다^^
    머드님~ 항상잘보고있습니다. 감사합니다.

    • 머드초보 2010.11.05 19:25  댓글주소  수정/삭제

      result값 받아서 아마 파싱하셔서 넣으셔야할겁니다 ㄷㄷ
      그리고 xml을 자동으로 array로 변환해주는 게 있는걸로 알고 있는데
      저도 안해본지 오래되어서ㅠㅠ

  6. BlogIcon 컴온예 2012.04.30 15:52  댓글주소  수정/삭제  댓글쓰기

    역시 머드초보님 글엔 좋은 정보가 많네요.

    Flex 접은지 몇년만에 다시 잡게 됐네요.ㅠ