CPSC 110-08: Computing on Mobile Phones
Spring 2011

Database and Lists

This tutorial provides a simple example of using a simple database and a list in App Inventor.


Databases are used to organize and manage information. They are a form of long term memory because the data they contain persist beyond the running of a single application. Once data is put into a database, it remains there until it is deleted. This differs from short term memory, such as global variables, which persist only as long as your app is running.


App Inventor has a simplified database component called a TinyDB, which stores persistent data right on the Android device. (App Inventor also has a TinyWebDb component, which stores data on a server. That will be covered in a separate tutorial.)

TinyDb stores data in a tag-value scheme. The tag is used as a key by which the data can be retrieved. For example:

OneThis is the first string
TwoThis is another string

To store a value in a TinyDb, you would use the StoreValue procedure, which takes two arguments, a tag and a value:

In TinyDb, the tag is always a text, but the associated value can be a number, or a string, or even a list. In this example, we use a list to a collection of information (latitude, longitude, and description) with the name of a building on campus.

Retrieving a Db Value

To retrieve a value from the Db, you use the GetValue function, which takes the tag as an argument and returns the associated value as its result. In this case we are retrieving the list of data associated with "Hamlin":

Plotting Points of Interest on a Map

Let's make a simple app that uses a TinyDb and List to plot points of interest on a canvas -- you can imagine that the canvas is a map. In this example, we will use a ball to represent a point on the map. And we will let the user select a screen location from a ListPicker component. Depending on which location the user picks, the app will plot that point on the canvas.

So our User Interface looks like this:

Note here how the PickPoints ListPicker is set up. The ElementsFromString property contains a comma-delimited list of words that will show up as the ListPicker's options.

Setting up Our Db

Let's use a TinyDb to store the (X,Y) coordinates of the points we want to plot. Note here that we define the setupDB procedure and then call it from the Screen1.Initialize block:

This will create a TinyDb with two items in it. Point "One" has location (100,100) and point "Two" has location (50,50). Notice that the tags are the same strings we used in our ListPicker.

(NOTE: Because this Db will persist, it is not necessary to create it every time we run this app, although it does no harm to do so. For example, we could instead use if-then logic to test whether the database exists and, if not, we could store our values. This is left as a exercise.)

Handling a List Picker

The last piece of this app is to handle the event that occurs when the user picks an option from the ListPicker:

Recall that our Db stores a list value with each tag. So we use the PlacesListPicker.Selection as our tag argument to retrieve list associated with that location. Then we use the select list item function to select the X and Y coordinates, which are used to set the location of the ball. Notice how list items are indexed. The first item in a list has index 1, the second has index 2, and so on.

The Sourcecode

Here's the app's sourcecode.