Android
Data objects
안드로이드 Parse에서 기본 데이터 쿼리 수행 가이드
12 분
안드로이드의 기본 쿼리 소개 이 가이드에서는 parse parse 에서 기본 쿼리를 수행하고 android android 앱을 이러한 쿼리를 사용하여 구현합니다 back4app back4app 을 사용하여 현실적인 데이터를 설정하고 쿼리하는 방법을 배웁니다 android android 이 튜토리얼은 buildtoolsversion=30 0 2 buildtoolsversion=30 0 2 , compile sdk version = 30 0 2 compile sdk version = 30 0 2 및 targetsdkversion=30 targetsdkversion=30 언제든지 이 튜토리얼로 구축된 전체 안드로이드 프로젝트에 접근할 수 있습니다 우리의 github 저장소에서 확인하세요 https //github com/templates back4app/android parse sdk kotlin https //github com/templates back4app/android parse sdk java 목표 우리의 목표는 back4app back4app 에서 데이터를 쿼리하는 것입니다 android android 앱을 통해 우리가 달성할 목표의 미리보기를 보여드립니다 전제 조건 이 튜토리얼을 완료하려면 다음이 필요합니다 https //developer android com/studio/index html back4app에서 생성된 앱 참고 https //www back4app com/docs/get started/new parse app 을 따라 back4app에서 parse 앱을 만드는 방법을 배우세요 back4app에 연결된 안드로이드 앱 참고 https //www back4app com/docs/android/parse android sdk 을 따라 back4app에 연결된 안드로이드 스튜디오 프로젝트를 만드세요 안드로이드 4 1 (젤리빈) 이상을 실행하는 장치 (또는 https //developer android com/studio/run/managing avds html ) 시작해봅시다! 다음 단계에 앞서, back4app back4app 을(를) 우리 애플리케이션에 연결해야 합니다 appid appid 와 clientkey clientkey 를 back4app back4app 에서 string xml string xml 파일에 저장한 후, parse parse 를 우리 app java app java 또는 app kt app kt 파일에서 초기화해야 합니다 https //www back4app com/docs/android/parse android sdk 을(를) 따라 하세요 parse parse 를(을) 앱에 초기화하는 방법을 모른다면 또는 위에 공유한 깃허브 링크에서 프로젝트를 다운로드하고 appid appid 와 clientkey clientkey 부분만 수정할 수 있습니다 1 parse query 클래스 이해하기 모든 parse 쿼리 작업은 parsequery parsequery 객체 유형을 사용하며, 이는 앱 전반에 걸쳐 데이터베이스에서 특정 데이터를 검색하는 데 도움이 됩니다 parsequery parsequery 는 retrieve 메서드(예 query findinbackground query findinbackground 호출 후에만 해결된다는 것을 아는 것이 중요합니다 따라서 쿼리를 설정하고 여러 수정자를 실제로 호출하기 전에 연결할 수 있습니다 새로운 parsequery parsequery ,를 생성하려면 원하는 parseobject 하위 클래스를 매개변수로 전달해야 하며, 이 클래스가 쿼리 결과를 포함하게 됩니다 아래에서 볼 수 있는 예제 쿼리에서는 가상의 profile 하위 클래스가 쿼리되고 있습니다 1 // this will create your query 2 parsequery\<parseobject> query = new parsequery<>("profile"); 3 // the query will resolve only after calling this method 4 query findinbackground();1 // this will create your query 2 val query = parsequery\<parseobject>("profile") 3 // the query will resolve only after calling this method 4 query findinbackground() 다음에 대한 자세한 내용을 읽을 수 있습니다 parse query parse query 클래스 https //www back4app com/docs/javascript/parse javascript sdk 2 back4app에 데이터를 저장하기 이 단계에서는 js 콘솔과 parse parse 에서 제공하는 javascript 코드를 사용하여 클래스를 생성하고 이 클래스에 대한 쿼리를 생성할 것입니다 프로필 profile profile 클래스를 생성합시다 이 클래스는 이 가이드에서 우리의 쿼리 대상이 될 것입니다 parse parse 대시보드 자바스크립트 콘솔에서는 javascript 코드를 직접 실행하고, js sdk 명령어를 사용하여 애플리케이션 데이터베이스 내용을 쿼리하고 업데이트할 수 있습니다 아래 코드를 js 콘솔에서 실행하고 back4app에 데이터를 삽입하세요 대시보드에서 js 콘솔이 어떻게 보이는지 확인해보세요 사용자 profile profile 클래스를 다음 예제 내용을 사용하여 생성하세요 1 // add profile objects and create table 2 // adam sandler 3 let profile = new parse object('profile'); 4 profile set('name', 'adam sandler'); 5 profile set('birthday', new date('09/09/1966')); 6 profile set('friendcount', 2); 7 profile set('favoritefoods', \['lobster', 'bread']); 8 await profile save(); 9 10 // adam levine 11 profile = new parse object('profile'); 12 profile set('name', 'adam levine'); 13 profile set('birthday', new date('03/18/1979')); 14 profile set('friendcount', 52); 15 profile set('favoritefoods', \['cake', 'bread']); 16 await profile save(); 17 18 // carson kressley 19 profile = new parse object('profile'); 20 profile set('name', 'carson kressley'); 21 profile set('birthday', new date('11/11/1969')); 22 profile set('friendcount', 12); 23 profile set('favoritefoods', \['fish', 'cookies']); 24 await profile save(); 25 26 // dan aykroyd 27 profile = new parse object('profile'); 28 profile set('name', 'dan aykroyd'); 29 profile set('birthday', new date('07/01/1952')); 30 profile set('friendcount', 66); 31 profile set('favoritefoods', \['jam', 'peanut butter']); 32 await profile save(); 33 34 // eddie murphy 35 profile = new parse object('profile'); 36 profile set('name', 'eddie murphy'); 37 profile set('birthday', new date('04/03/1961')); 38 profile set('friendcount', 49); 39 profile set('favoritefoods', \['lettuce', 'pepper']); 40 await profile save(); 41 42 // fergie 43 profile = new parse object('profile'); 44 profile set('name', 'fergie'); 45 profile set('birthday', new date('03/27/1975')); 46 profile set('friendcount', 55); 47 profile set('favoritefoods', \['lobster', 'shrimp']); 48 await profile save(); 49 50 console log('success!'); 3 데이터 쿼리하기 이제 클래스가 채워졌으므로, 기본 쿼리를 수행할 수 있습니다 이름으로 결과를 필터링하는 것부터 시작하겠습니다 이는 문자열 유형 필드로, profile profile 이라는 이름을 포함하는 값을 검색합니다 아담 아담 을 사용하여 parse query contains parse query contains 메서드를 사용합니다 1 // create your query 2 let parsequery = new parse query('profile'); 3 4 // `contains` is a basic query method that checks if string field 5 // contains a specific substring 6 parsequery contains('name', 'adam'); 7 8 // the query will resolve only after calling this method, retrieving 9 // an array of `parse objects` 10 let queryresults = await parsequery find(); 11 12 // let's show the results 13 for (let result of queryresults) { 14 // you access `parse objects` attributes by using ` get` 15 console log(result get('name')); 16 }; 이제 숫자 유형 필드로 쿼리해 보겠습니다 friendcount friendcount 을 사용하여 또 다른 일반 쿼리 메서드인 parse query greaterthan parse query greaterthan 이 경우, 친구 수가 20보다 큰 profiles profiles 를 원합니다 1 // create your query 2 let parsequery = new parse query('profile'); 3 4 // `greaterthan` is a basic query method that does what it 5 // says on the tin 6 parsequery greaterthan('friendcount', 20); 7 8 // the query will resolve only after calling this method, retrieving 9 // an array of `parse objects` 10 let queryresults = await parsequery find(); 11 12 // let's show the results 13 for (let result of queryresults) { 14 // you access `parse objects` attributes by using ` get` 15 console log(`name ${result get('name')}, friend count ${result get('friendcount')}`); 16 }; 다른 반복 쿼리 메서드는 parse query ascending parse query ascending 및 parse query descending parse query descending , 쿼리를 정렬하는 역할을 합니다 이 정렬은 대부분의 데이터 유형에서 수행할 수 있으므로, 날짜 필드 birthday birthday 를 기준으로 쿼리를 가장 어린 사람으로 정렬해 보겠습니다 1 // create your query 2 let parsequery = new parse query('profile'); 3 4 // `descending` and `ascending` can and should be chained 5 // with other query methods to improve your queries 6 parsequery descending('birthday'); 7 8 // the query will resolve only after calling this method, retrieving 9 // an array of `parse objects` 10 let queryresults = await parsequery find(); 11 12 // let's show the results 13 for (let result of queryresults) { 14 // you access `parse objects` attributes by using ` get` 15 console log(`name ${result get('name')}, birthday ${result get('birthday')}`); 16 }; 앞서 언급했듯이, 더 정교한 결과를 얻기 위해 쿼리 메서드를 연결할 수 있으며 연결해야 합니다 그러면 이전 예제를 단일 쿼리 요청으로 결합해 보겠습니다 1 // create your query 2 let parsequery = new parse query('profile'); 3 4 parsequery contains('name', 'adam'); 5 parsequery greaterthan('friendcount', 20); 6 parsequery descending('birthday'); 7 8 // the query will resolve only after calling this method, retrieving 9 // an array of `parse objects` 10 let queryresults = await parsequery find(); 11 12 // let's show the results 13 for (let result of queryresults) { 14 // you access `parse objects` attributes by using ` get` 15 console log(`name ${result get('name')}, friend count ${result get('friendcount')}, birthday ${result get('birthday')}`); 16 }; 4 우리 android 앱에서의 쿼리 이제 android 애플리케이션에서 java와 kotlin을 사용하여 위에서 js 콘솔로 수행한 작업을 수행하겠습니다 4개의 서로 다른 쿼리를 만들어 프로필을 나열할 것입니다 1 private void doquerybyname() { 2 parsequery\<parseobject> query = new parsequery<>("profile"); 3 query wherecontains("name", "adam"); 4 progressdialog show(); 5 query findinbackground((objects, e) > { 6 progressdialog hide(); 7 if (e == null) { 8 adapter = new resultadapter(this, objects); 9 resultlist setlayoutmanager(new linearlayoutmanager(this)); 10 resultlist setadapter(adapter); 11 } else { 12 toast maketext(this, e getlocalizedmessage(), toast length short) show(); 13 } 14 }); 15 } 16 17 private void doquerybyfriendcount() { 18 parsequery\<parseobject> query = new parsequery<>("profile"); 19 query wheregreaterthan("friendcount", 20); 20 progressdialog show(); 21 query findinbackground((objects, e) > { 22 progressdialog hide(); 23 if (e == null) { 24 adapter = new resultadapter(this, objects); 25 resultlist setlayoutmanager(new linearlayoutmanager(this)); 26 resultlist setadapter(adapter); 27 } else { 28 toast maketext(this, e getlocalizedmessage(), toast length short) show(); 29 } 30 }); 31 } 32 33 private void doquerybyordering() { 34 parsequery\<parseobject> query = new parsequery<>("profile"); 35 query orderbydescending("birthday"); 36 progressdialog show(); 37 query findinbackground((objects, e) > { 38 progressdialog hide(); 39 if (e == null) { 40 adapter = new resultadapter(this, objects); 41 resultlist setlayoutmanager(new linearlayoutmanager(this)); 42 resultlist setadapter(adapter); 43 } else { 44 toast maketext(this, e getlocalizedmessage(), toast length short) show(); 45 } 46 }); 47 } 48 49 private void doquerybyall() { 50 parsequery\<parseobject> query = new parsequery<>("profile"); 51 query wherecontains("name", "adam"); 52 query wheregreaterthan("friendcount", 20); 53 query orderbydescending("birthday"); 54 progressdialog show(); 55 56 query findinbackground((objects, e) > { 57 progressdialog hide(); 58 59 if (e == null) { 60 adapter = new resultadapter(this, objects); 61 resultlist setlayoutmanager(new linearlayoutmanager(this)); 62 resultlist setadapter(adapter); 63 resultlist setnestedscrollingenabled(false); 64 } else { 65 toast maketext(this, e getlocalizedmessage(), toast length short) show(); 66 } 67 }); 68 }1 private fun doquerybyname() { 2 val query = parsequery\<parseobject>("profile") 3 query wherecontains("name", "adam") 4 progressdialog!! show() 5 query findinbackground { objects list\<parseobject>?, e parseexception? > 6 progressdialog!! hide() 7 if (e == null) { 8 adapter = resultadapter(this, objects) 9 resultlist!! layoutmanager = linearlayoutmanager(this) 10 resultlist!! adapter = adapter 11 } else { 12 toast maketext(this, e localizedmessage, toast length short) show() 13 } 14 } 15 } 16 17 private fun doquerybyfriendcount() { 18 val query = parsequery\<parseobject>("profile") 19 query wheregreaterthan("friendcount", 20) 20 progressdialog!! show() 21 query findinbackground { objects list\<parseobject>?, e parseexception? > 22 progressdialog!! hide() 23 if (e == null) { 24 adapter = resultadapter(this, objects) 25 resultlist!! layoutmanager = linearlayoutmanager(this) 26 resultlist!! adapter = adapter 27 } else { 28 toast maketext(this, e localizedmessage, toast length short) show() 29 } 30 } 31 } 32 33 private fun doquerybyordering() { 34 val query = parsequery\<parseobject>("profile") 35 query orderbydescending("birthday") 36 progressdialog!! show() 37 query findinbackground { objects list\<parseobject>?, e parseexception? > 38 progressdialog!! hide() 39 if (e == null) { 40 adapter = resultadapter(this, objects) 41 resultlist!! layoutmanager = linearlayoutmanager(this) 42 resultlist!! adapter = adapter 43 } else { 44 toast maketext(this, e localizedmessage, toast length short) show() 45 } 46 } 47 } 48 49 private fun doquerybyall() { 50 val query = parsequery\<parseobject>("profile") 51 query wherecontains("name", "adam") 52 query wheregreaterthan("friendcount", 20) 53 query orderbydescending("birthday") 54 progressdialog!! show() 55 query findinbackground { objects list\<parseobject>?, e parseexception? > 56 progressdialog!! hide() 57 if (e == null) { 58 adapter = resultadapter(this, objects) 59 resultlist!! layoutmanager = linearlayoutmanager(this) 60 resultlist!! adapter = adapter 61 resultlist!! isnestedscrollingenabled = false 62 } else { 63 toast maketext(this, e localizedmessage, toast length short) show() 64 } 65 } 66 } 완료되었습니다! 이 가이드를 끝내면서, parse에서 기본 데이터 쿼리가 어떻게 작동하는지와 android 앱에서 back4app에서 이를 수행하는 방법을 배웠습니다