Consultas Relacionais em Android com Parse e Back4App
9 min
consultas relacionais no android introdução neste guia, você realizará consultas relacionais no parse e implementará um aplicativo android usando essas consultas você aprenderá como configurar e consultar dados realistas usando back4app e android este tutorial usa um aplicativo criado no android studio arctic fox 2020 3 1 com compilesdk = 30 compilesdk = 30 , minsdk = 23 minsdk = 23 e targetsdk = 30 targetsdk = 30 a qualquer momento, você pode acessar o projeto android completo construído com este tutorial em nossos repositórios do github repositório de exemplo em kotlin https //github com/templates back4app/android parse sdk kotlin repositório de exemplo em java https //github com/templates back4app/android parse sdk java objetivo nosso objetivo é consultar dados armazenados no back4app back4app de um aplicativo android aplicativo android aqui está uma prévia do que vamos alcançar pré requisitos para completar este tutorial, precisamos android studio https //developer android com/studio/index html um aplicativo criado no back4app nota siga o tutorial de novo aplicativo parse https //www back4app com/docs/get started/new parse app para aprender como criar um aplicativo parse no back4app um aplicativo android conectado ao back4app nota siga o tutorial de instalação do sdk parse https //www back4app com/docs/android/parse android sdk para criar um projeto android studio conectado ao back4app um dispositivo (ou dispositivo virtual https //developer android com/studio/run/managing avds html ) rodando android 4 1 (jelly bean) ou mais recente vamos começar! antes dos próximos passos, precisamos conectar back4app back4app ao nosso aplicativo você deve salvar o appid appid e clientkey clientkey do back4app back4app para o string xml string xml arquivo e então inicializar parse parse no nosso app java app java ou app kt app kt arquivo siga o novo tutorial de app parse https //www back4app com/docs/android/parse android sdk se você não souber como inicializar parse parse no seu aplicativo ou você pode baixar os projetos que compartilhamos nos links do github acima e editar apenas as partes de appid appid e clientkey clientkey de acordo com você a qualquer momento, você pode acessar o projeto android completo construído com este tutorial em nossos repositórios do github repositório de exemplo kotlin https //github com/templates back4app/android parse sdk kotlin repositório de exemplo java https //github com/templates back4app/android parse sdk java 1 salve alguns dados no back4app nesta etapa, criaremos uma classe com o console js e os códigos javascript fornecidos por parse parse e criaremos consultas para esta classe vamos criar uma variedade de classes, que serão o alvo de nossas consultas neste guia as classes são autor autor , livro livro , editora editora e livraria livraria , na qual livro livro tem uma relação 1\ n com editora editora e n\ n com autor autor , e livraria livraria tem uma relação n\ n com livro livro no console js do parse, é possível executar código javascript diretamente, consultando e atualizando o conteúdo do banco de dados da sua aplicação usando os comandos do sdk js execute o código abaixo a partir do seu console js e insira os dados no back4app aqui está como o console js se parece no seu painel vá em frente e crie as classes com o seguinte conteúdo de exemplo 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 consultar os dados do aplicativo android agora que você preencheu todas as classes, podemos realizar algumas consultas relacionais nelas vamos começar filtrando livros livros os resultados pela editora, buscando aqueles que pertencem à editora editora “acacia publishings” (ou “editora a”) usando o método básico 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 } vamos agora consultar quais livrarias livrarias objetos contêm livros livros objetos com data de publicação maior que 01/01/2010, usando uma consulta interna com o parsequery wheregreaterthan parsequery wheregreaterthan método e então o parsequery wherematchesquery parsequery wherematchesquery método 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 } agora vamos criar uma consulta relacional mais complexa, procurando por bookstore bookstore objetos que têm pelo menos um book book escrito por author author “aaron writer” (ou “authora”), usando whereequalto whereequalto e 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 } está feito! no final deste guia, você aprendeu como funcionam as consultas relacionais no parse e como realizá las no back4app a partir de um aplicativo android