안드로이드에서 글 저장을 R.array 참조값으로 처리하기 위한 방법 연구

Posted on

안드로이드에서는 글을 저장할때 DB를 많이 씁니다. 편리한 처리를 위해 Room을 써서 SQLite를 쓰는 방법이 유력합니다. 그런데 Room을 안쓰고 리소스 디렉토리에 XML로 저장해서 R.array 참조값으로 문자열과 드로어블 리소스를 받아와서 배열로 처리하는 방법도 있습니다. XML로 저장한 글을 불러와서 처리하는 한 방식으로 여러모로 쓸만합니다.

간단하게 한마디로 말하자면, res/values 디렉토리에 XML 파일을 만들고, TypedArray나 StringArray로 가져와서 이를 코틀린 코드로 처리해서 화면에 표시합니다.

저장한 XML 파일의 구조는 아래와 같습니다.

res/values/contents.xml

이렇게 저장해두고 루프를 돌려 텍스트뷰에다가 표시할 수 있습니다.

contents는 배열변수이고, R.array 참조로 item값을 가져와서 루프로 돌리면 여러개의 글을 Room이나 DB 처리 없이도 처리가 됩니다.

그런데 한 XML 파일의 크기가 커지게 되면 글을 무한정 추가할 수 없습니다. 컴파일 에러가 납니다. 이럴 때는 파일을 분리해서 저장하고 에 @string/R.string참조값 을 기재해서 쓰면 컴파일 에러가 안납니다.

res/values/contents.xml:

이 코드와 윗 코드의 차이점은 직접 글을 입력하기보다 분리된 다른 XML마다 한편씩 저장해서 분산시키고 contents.xml 에다가는 해당 글들의 R.string 참조값을 기재하는 방법입니다. 500자로 되던 글이 스무자 정도로 압축되게 되어 컴파일 에러를 피할 수 있습니다.

res/values/writing1.xml:

res/values/writingn.xml:

이렇게 글 개수대로 따로 XML을 한편씩 만들어 분산 해두고 아래처럼 불러오면 윗단에 제일 먼저 소개한 코드와 똑같이 작동합니다. 컴파일 에러가 안납니다.

이렇게 해서 똑같이 루프 돌려 처리하면 됩니다.

이 방법은 Room과 SQLite를 쓰기가 번거로울때 쓰기 좋고 또한 번역해야 할 문자열로 된 글일때 더욱 더 좋다고 생각합니다. 안드로이드 스튜디오에서 XML 리소스 파일을 처리하는 기능으로 간편하게 다국어 처리가 되기 때문입니다.속도가 느려지는지는 미상입니다.

일단 참고가 되실 것입니다.

참고로 윗 글에서 각 item들이 500자라고 한 것은 임의로 기재한 것입니다. 최대 몇자까지 들어갈 수 있는지는 확인을 안했는데 거의 100KB 가까이 한 XML에 저장하니 컴파일 에러가 나더군요. 이 내용을 일곱개의 XML에 분산저장후 @string/R.string참조값으로 참조하게 하였습니다. 잘 작동합니다.

1 thought on “안드로이드에서 글 저장을 R.array 참조값으로 처리하기 위한 방법 연구

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다