Android
Data objects
Android中通过Parse查询关系数据的实现指南
8 分
在android上的关系查询 介绍 在本指南中,您将执行parse中的关系查询,并使用这些查询实现一个android应用程序。您将学习如何使用back4app和android设置和查询真实数据。 本教程使用在android studio arctic fox 2020 3 1中创建的应用程序,使用 compilesdk = 30 compilesdk = 30 , minsdk = 23 minsdk = 23 和 targetsdk = 30 targetsdk = 30 在任何时候,您都可以在我们的github仓库中访问使用本教程构建的完整android项目 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 上创建解析应用程序。 一个连接到 back4app 的安卓应用程序。 注意: 请遵循 https //www back4app com/docs/android/parse android sdk 以创建一个连接到 back4app 的 android studio 项目。 一台运行 android 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 文件。 如果您不知道如何将 parse parse 初始化到您的应用程序中,请遵循 https //www back4app com/docs/android/parse android sdk 或者您可以下载我们在上面分享的 github 链接的项目,并根据您的需要仅编辑 appid appid 和 clientkey clientkey 部分。 随时,您都可以在我们的 github 仓库中访问使用本教程构建的完整 android 项目 https //github com/templates back4app/android parse sdk kotlin https //github com/templates back4app/android parse sdk java 1 在 back4app 上保存一些数据 在这一步中,我们将使用提供的 js 控制台和 javascript 代码创建一个类,来自 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 } 现在让我们查询哪些 书店 书店 对象包含 书籍 书籍 对象,其出版日期晚于 2010年01月01日,使用带有 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上执行这些查询。