Android
Data objects
안드로이드 앱에서 Parse를 활용한 관계형 쿼리 구현하기
9 분
안드로이드에서의 관계형 쿼리 소개 이 가이드에서는 parse에서 관계형 쿼리를 수행하고 이러한 쿼리를 사용하여 안드로이드 앱을 구현합니다 back4app과 안드로이드를 사용하여 현실적인 데이터를 설정하고 쿼리하는 방법을 배웁니다 이 튜토리얼은 compilesdk = 30 compilesdk = 30 로 생성된 앱을 사용합니다 minsdk = 23 minsdk = 23 및 targetsdk = 30 targetsdk = 30 언제든지 이 튜토리얼로 구축된 전체 안드로이드 프로젝트에 접근할 수 있습니다 우리의 github 저장소에서 확인하세요 코틀린 예제 저장소 자바 예제 저장소 목표 우리의 목표는 back4app back4app 에서 데이터를 쿼리하는 것입니다 안드로이드 안드로이드 앱에서 우리가 달성할 목표의 미리보기를 보여드립니다 필수 조건 이 튜토리얼을 완료하려면 다음이 필요합니다 안드로이드 스튜디오 back4app에서 생성된 앱 참고 다음의 새 파스 앱 튜토리얼 을 따라 back4app에서 파스 앱을 만드는 방법을 배우세요 back4app에 연결된 안드로이드 앱 참고 다음의 파스 sdk 설치 튜토리얼 을 따라 back4app에 연결된 안드로이드 스튜디오 프로젝트를 만드세요 안드로이드 4 1 (젤리빈) 이상에서 실행되는 장치 (또는 가상 장치 ) 시작해봅시다! 다음 단계에 앞서, 우리는 back4app back4app 을(를) 우리의 애플리케이션에 연결해야 합니다 appid appid 와 clientkey clientkey 를 back4app back4app 에서 string xml string xml 파일에 저장한 후, parse parse 를 우리의 app java app java 또는 app kt app kt 파일에서 초기화해야 합니다 새 parse 앱 튜토리얼 을(를) 따라 하세요 parse parse 를(을) 앱에 초기화하는 방법을 모른다면 또는 위에 공유한 깃허브 링크에서 프로젝트를 다운로드하고 appid appid 와 clientkey clientkey 부분만 수정할 수 있습니다 언제든지 이 튜토리얼로 구축된 전체 android 프로젝트에 접근할 수 있습니다 우리의 깃허브 저장소에서 확인하세요 코틀린 예제 저장소 자바 예제 저장소 1 back4app에 데이터 저장하기 이 단계에서는 제공된 js 콘솔과 자바스크립트 코드를 사용하여 클래스를 생성하고 parse parse 를 위해 이 클래스에 대한 쿼리를 생성할 것입니다 이 가이드에서 쿼리의 대상이 될 다양한 클래스를 생성해 보겠습니다 클래스는 다음과 같습니다 저자 저자 , 책 책 , 출판사 출판사 및 서점 서점 , 여기서 책 책 은 출판사 출판사 와 1\ n 관계를 가지며 저자 저자 와 n\ n 관계를 가집니다 그리고 서점 서점 은 책 책 과 n\ n 관계를 가집니다 parse js 콘솔에서는 javascript 코드를 직접 실행하여 js sdk 명령을 사용하여 애플리케이션 데이터베이스 내용을 쿼리하고 업데이트할 수 있습니다 아래 코드를 js 콘솔에서 실행하고 back4app에 데이터를 삽입하세요 대시보드에서 js 콘솔은 다음과 같이 보입니다 다음 예제 내용을 사용하여 클래스를 생성하세요 1 // add objects and create tables 2 // authors 3 const authora = new parse object('author'); 4 authora set('name', 'aaron writer'); 5 await authora save(); 6 7 const authorb = new parse object('author'); 8 authorb set('name', 'beatrice novelist'); 9 await authorb save(); 10 11 const authorc = new parse object('author'); 12 authorc set('name', 'casey columnist'); 13 await authorc save(); 14 15 // publishers 16 const publishera = new parse object('publisher'); 17 publishera set('name', 'acacia publishings'); 18 await publishera save(); 19 20 const publisherb = new parse object('publisher'); 21 publisherb set('name', 'birch distributions'); 22 await publisherb save(); 23 24 // books 25 const booka = new parse object('book'); 26 booka set('title', 'a love story'); 27 booka set('publisher', publishera); 28 booka set('publishingdate', new date('05/07/1998')); 29 const bookarelation = booka relation("authors"); 30 bookarelation add(authora); 31 await booka save(); 32 33 const bookb = new parse object('book'); 34 bookb set('title', 'benevolent elves'); 35 bookb set('publisher', publisherb); 36 bookb set('publishingdate', new date('11/31/2008')); 37 const bookbrelation = bookb relation("authors"); 38 bookbrelation add(authorb); 39 await bookb save(); 40 41 const bookc = new parse object('book'); 42 bookc set('title', 'can you believe it?'); 43 bookc set('publisher', publisherb); 44 bookc set('publishingdate', new date('08/21/2018')); 45 const bookcrelation = bookc relation("authors"); 46 bookcrelation add(authora); 47 bookcrelation add(authorc); 48 await bookc save(); 49 50 // bookstore 51 const bookstorea = new parse object('bookstore'); 52 bookstorea set('name', 'books of love'); 53 const bookstorearelation = bookstorea relation("books"); 54 bookstorearelation add(booka); 55 await bookstorea save(); 56 57 const bookstoreb = new parse object('bookstore'); 58 bookstoreb set('name', 'fantasy books'); 59 const bookstorebrelation = bookstoreb relation("books"); 60 bookstorebrelation add(bookb); 61 await bookstoreb save(); 62 63 const bookstorec = new parse object('bookstore'); 64 bookstorec set('name', 'general books'); 65 const bookstorecrelation = bookstorec relation("books"); 66 bookstorecrelation add(booka); 67 bookstorecrelation add(bookc); 68 await bookstorec save(); 69 70 console log('success'); 2 android 앱에서 데이터 쿼리하기 모든 클래스를 채웠으니, 이제 몇 가지 관계형 쿼리를 수행할 수 있습니다 출판사에 따라 결과를 필터링해 보겠습니다 책 책 을 검색하여 출판사 출판사 “acacia publishings” (또는 “출판사 a”)에 속하는 책을 찾기 위해 기본 parsequery equalto parsequery equalto 메서드를 사용합니다 1 progressdialog show(); 2 parsequery\<parseobject> publisherquery = new parsequery<>("publisher"); 3 publisherquery whereequalto("name", "acacia publishings"); 4 try { 5 parseobject publisher = publisherquery getfirst(); 6 parsequery\<parseobject> bookquery = new parsequery\<parseobject>("book"); 7 bookquery whereequalto("publisher", publisher); 8 bookquery findinbackground((objects, e) > { 9 progressdialog hide(); 10 if (e == null) { 11 initdata(objects); 12 } else { 13 toast maketext(this, e getlocalizedmessage(), toast length short) show(); 14 } 15 }); 16 } catch (parseexception e) { 17 progressdialog hide(); 18 e printstacktrace(); 19 }1 progressdialog? show() 2 val publisherquery = parsequery\<parseobject>("publisher") 3 publisherquery whereequalto("name", "acacia publishings") 4 try { 5 val publisher = publisherquery first 6 val bookquery = parsequery\<parseobject>("book") 7 bookquery whereequalto("publisher", publisher) 8 bookquery findinbackground { objects list\<parseobject>?, e parseexception? > 9 progressdialog? hide() 10 if (e == null) { 11 initdata(objects!!) 12 } else { 13 toast maketext(this, e localizedmessage, toast length short) show() 14 } 15 } 16 } catch (e parseexception) { 17 progressdialog? hide() 18 e printstacktrace() 19 } 이제 bookstore bookstore 객체가 book book 객체를 포함하고 있는지 쿼리해 보겠습니다 출판 날짜가 2010년 1월 1일 이후인 객체를 찾기 위해 parsequery wheregreaterthan parsequery wheregreaterthan 메서드와 parsequery wherematchesquery parsequery wherematchesquery 메서드를 사용합니다 1 progressdialog show(); 2 parsequery\<parseobject> bookquery = new parsequery<>("book"); 3 4 calendar calendar = calendar getinstance(); 5 calendar set(2010,1,1,59,59,59); 6 date date = calendar gettime(); 7 8 bookquery wheregreaterthan("publishingdate", date); 9 10 parsequery\<parseobject> bookstorequery = new parsequery<>("bookstore"); 11 bookstorequery wherematchesquery("books",bookquery); 12 bookstorequery findinbackground((objects, e) > { 13 progressdialog hide(); 14 if (e==null){ 15 initdata(objects); 16 } else { 17 toast maketext(this, e getlocalizedmessage(), toast length short) show(); 18 } 19 });1 progressdialog? show() 2 val bookquery = parsequery\<parseobject>("book") 3 val calendar = calendar getinstance() 4 calendar\[2010, 1, 1, 59, 59] = 59 5 val date = calendar time 6 bookquery wheregreaterthan("publishingdate", date) 7 val bookstorequery = parsequery\<parseobject>("bookstore") 8 bookstorequery wherematchesquery("books", bookquery) 9 bookstorequery findinbackground { objects list\<parseobject>?, e parseexception? > 10 progressdialog? hide() 11 if (e == null) { 12 initdata(objects!!) 13 } else { 14 toast maketext(this, e localizedmessage, toast length short) show() 15 } 16 } 이제 더 복잡한 관계형 쿼리를 만들어 보겠습니다 서점 서점 객체를 찾고 있습니다 이 객체는 최소한 하나의 책 책 이 “ 작가 작가 “aaron writer” (또는 “authora”)에 의해 작성되었습니다 whereequalto whereequalto 및 wherematchesquery wherematchesquery 1 progressdialog show(); 2 parsequery\<parseobject> authorquery = new parsequery<>("author"); 3 authorquery whereequalto("name","aaron writer"); 4 try { 5 parseobject authora = authorquery getfirst(); 6 parsequery\<parseobject> bookquery = new parsequery<>("book"); 7 bookquery whereequalto("authors",authora); 8 9 parsequery\<parseobject> bookstorequery = new parsequery<>("bookstore"); 10 bookstorequery wherematchesquery("books",bookquery); 11 12 bookstorequery findinbackground((objects, e) > { 13 progressdialog hide(); 14 if (e==null){ 15 initdata(objects); 16 } else { 17 toast maketext(this, e getlocalizedmessage(), toast length short) show(); 18 } 19 }); 20 21 22 } catch (parseexception e) { 23 progressdialog hide(); 24 e printstacktrace(); 25 }1 progressdialog? show() 2 val authorquery = parsequery\<parseobject>("author") 3 authorquery whereequalto("name", "aaron writer") 4 try { 5 val authora = authorquery first 6 val bookquery = parsequery\<parseobject>("book") 7 bookquery whereequalto("authors", authora) 8 val bookstorequery = parsequery\<parseobject>("bookstore") 9 bookstorequery wherematchesquery("books", bookquery) 10 bookstorequery findinbackground { objects list\<parseobject>?, e parseexception? > 11 progressdialog? hide() 12 if (e == null) { 13 initdata(objects!!) 14 } else { 15 toast maketext(this, e localizedmessage, toast length short) show() 16 } 17 } 18 } catch (e parseexception) { 19 progressdialog? hide() 20 e printstacktrace() 21 } 완료되었습니다! 이 가이드를 마치면, parse에서 관계형 쿼리가 어떻게 작동하는지와 android 앱에서 back4app에서 이를 수행하는 방법을 배웠습니다