INTRODUCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix
Developing for Android Tablets and Smartphones . . . . . . . . . . . . . . . . . . . 1
The Relational Model and SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Android Database Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Content Providers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
REST, Content Providers, Concurrency,
Networking, and Sync Adapters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Service Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Mobile and the Cloud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Complex Device-Based Data: Android Contacts. . . . . . . . . . . . . . . . . . 245
Generic Data Synchronization:
Project Migrate and the WebData API . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
WebData Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Building Human Interfaces for Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
PROGRAMMING ANDROID DATABASE
APPLICATIONS FOR THE ENTERPRISE
G. Blake Meike
Enterprise Android™: Programming Android Database Applications for the Enterprise
John Wiley & Sons, Inc.
10475 Crosspoint Boulevard
Indianapolis, IN 46256
Copyright © 2014 by John Wiley & Sons, Inc., Indianapolis, Indiana
Published simultaneously in Canada
ISBN: 978-1-118-22747-3 (ebk)
ISBN: 978-1-118-24046-5 (ebk)
Manufactured in the United States of America
10 9 8 7 6 5 4 3 2 1
No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by any means,
electronic, mechanical, photocopying, recording, scanning or otherwise, except as permitted under Sections 107 or 108
of the 1976 United States Copyright Act, without either the prior written permission of the Publisher, or authorization
through payment of the appropriate per-copy fee to the Copyright Clearance Center, 222 Rosewood Drive, Danvers,
MA 01923, (978) 750-8400, fax (978) 646-8600. Requests to the Publisher for permission should be addressed to the
Permissions Department, John Wiley & Sons, Inc., 111 River Street, Hoboken, NJ 07030, (201) 748-6011,
fax (201) 748-6008, or online at http://www.wiley.com/go/permissions.
Limit of Liability/Disclaimer of Warranty: The publisher and the author make no representations or warranties with
respect to the accuracy or completeness of the contents of this work and specifically disclaim all warranties, including
without limitation warranties of fitness for a particular purpose. No warranty may be created or extended by sales or
promotional materials. The advice and strategies contained herein may not be suitable for every situation. This work is
sold with the understanding that the publisher is not engaged in rendering legal, accounting, or other professional
services. If professional assistance is required, the services of a competent professional person should be sought. Neither
the publisher nor the author shall be liable for damages arising herefrom. The fact that an organization or Web site is
referred to in this work as a citation and/or a potential source of further information does not mean that the author or the
publisher endorses the information the organization or Web site may provide or recommendations it may make. Further,
readers should be aware that Internet Web sites listed in this work may have changed or disappeared between when this
work was written and when it is read.
For general information on our other products and services please contact our Customer Care Department within the
United States at (877) 762-2974, outside the United States at (317) 572-3993 or fax (317) 572-4002.
Wiley publishes in a variety of print and electronic formats and by print-on-demand. Some material included with
standard print versions of this book may not be included in e-books or in print-on-demand. If this book refers to media
such as a CD or DVD that is not included in the version you purchased, you may download this material at
http://booksupport.wiley.com. For more information about Wiley products, visit www.wiley.com.
Library of Congress Control Number: 2013936843
Trademarks: Wiley, , Wrox, the Wrox logo, Wrox Programmer to Programmer, and related trade dress are trademarks or
registered trademarks of John Wiley & Sons, Inc. and/or its affi liates, in the United States and other countries, and may
not be used without written permission. Android is a trademark of Google, Inc. All other trademarks are the property of
their respective owners. John Wiley & Sons, Inc., is not associated with any product or vendor mentioned in this book.
To Maija and Charles
To Jerry Meike, my inspiration for writing a book...
and a lot more
—G. Blake Meike
To Norah and Claire, my girls
ABOUT THE AUTHORS
ZIGURD MEDNIEKS is a consultant to leading OEMs, enterprises, investors, and entrepreneurial
ventures creating Android-based systems and software. Previously, he was Chief Architect at D2
Technologies, a voice-over-IP (VoIP) technology provider. There he led engineering and productdefi nition work for products that blend communication and social media in purpose-built embedded
systems and on the Android platform.
Zigurd is a 25-year veteran of user interface, telephony, and social media product creation in
the computing and telecommunications industries. He has authored and co-authored books
about Android software development, and written book chapters on telephony and inter-process
communication. His fi rst book, C Programming Techniques for the Macintosh, co-authored with
Terry Mednieks, was published in 1986. Information about Zigurd can be found at zigurd.com.
G. BLAKE MEIKE is a passionate engineer and code poet with more than 20 years of experience. He
has spent much of his time working with Java, building systems as large as Amazon’s massively
scalable Auto Scaling service and as small as a pre-Android OSS/Linux- and Java-based platform
for cell phones. He is co-author of the bestselling Programming Android and has taught nearly a
thousand people the art of writing Android apps that aren’t toys.
LAIRD DORNIN graduated from Williams College in 1997 with a Bachelor of Arts degree in
Computer Science. Laird began his career at Sun Microsystems working on the Java JDK (RMI) and
the forward-looking Jini Technology out of Sun Labs. From there he moved to SavaJe Technologies
and helped to build a full-featured Java SE mobile operating system that shipped in 2006 and provided the platform for “Device of the Show” at JavaOne. Again at Sun Microsystems, Laird continued working on SavaJe OS to integrate the WebKit browser library to provide a full-featured mobile
browser. Laird is an author of two books on Android programming and now works as an architect
for a major wireless carrier.
ZANE PAN began building large, scalable distributed systems at Sun Microsystems Labs working
on Jini Technology in the late ‘90s. He has been actively designing and architecting solutions for
distributed computing performance and scalability problems since then. Zane has held architect
level roles at many large companies including Lotus Development Corporation, Digital Equipment
Corporation, Intuit, and EMC. Most recently, Zane architected and built a large-scale mobile service backend system using Big Data and NoSQL at Nokia.
ABOUT THE TECHNICAL EDITOR
MAIJA MEDNIEKS is a senior at the Carnegie Mellon University School of Computer Science and a
former buggy driver. Among her interests are knitting, Norse epics, science fiction, interactive user
experience design, creating and solving puzzles for puzzle hunts, and functional programming.
ABOUT THE TECHNICAL PROOFREADER
JIM FITZGERALD has worked in many facets of the technology industry. His humble beginnings
in Silicon Valley as a software engineer for Hewlett-Packard eventually led him to positions in
marketing and sales before graduate school brought him back to software development and
project management. He has programmed in many different languages and operating systems,
from old mainframes to Windows desktops, and currently spends his time in Android and
Windows mobile environments. While he considers himself more of a frontend guy, he will
admit to dabbling with PHP and writing a lot of PL/SQL in the past when pressed.
When not investigating how technical things work, Jim spends his time as a bibliophile, avid artist
and photographer, collecting far more books, paint brushes, and lenses than he can hope to use.
Jim has a undergraduate BS degree from California Polytechnic, and a MS degree from Yale
SENIOR PROJECT EDITOR
VICE PRESIDENT AND EXECUTIVE GROUP
VICE PRESIDENT AND EXECUTIVE PUBLISHER
PROJECT COORDINATOR, COVER
Mary Beth Wakeﬁeld
FREELANCER EDITORIAL MANAGER
ASSOCIATE DIRECTOR OF MARKETING
I WANT TO THANK the editors at Wiley who have the vision to publish books about Android in the
enterprise; our agent, Carole Jelen, for bringing this project to us; and my co-authors who brought the
concept of a book about data-oriented apps to life. I also thank Maija Mednieks and Jim Fitzgerald,
the technical editor and technical proofreader, for their exacting attention to making sure our
I WOULD LIKE TO THANK my co-authors, Zigurd, Laird, and Zane, for making this book way bigger
than the sum of its parts. Bob Elliott and Kevin Kent were incredibly patient with us; and the rest of
the editors, Maija Mednieks, Christine Mugnolo, Kezia Endsley, and Jim Fitzgerald, kept us honest
and intelligible. Marakana Inc., my employer, gave me time to work on it. A special shout out to
L. Carl Pedersen for taking the time to explain SQL. As always, a project like this would be
impossible without the support of my wife, Catherine. You and me, babe, ‘til the wheels fall off.
—G. Blake Meike
I NEED TO THANK my sweetie, Norah, for being so patient with all the long weekends and late nights
working on this ambitious project. You’ve been amazing for this, and for carrying another far more
important project—our new son.
Thanks to my parents—we’ve missed trips to NH!
I’d like to thank Kevin and Robert for all their excellent support on this project. I’m excited that we
managed to cover so many popular topics to create a comprehensive picture of end-to-end enterprise
Android development. Thanks to Jim and Maija, our reviewers; this book contained a lot of material
to cover. Thanks to my brother, Chris, and to Nathan Babb for reviewing parts of the manuscript.
Finally, thanks to my co-authors for collaborating to bring this project to completion.
I’D LIKE TO THANK Kevin and Robert for their support on this project.
CHAPTER 1: DEVELOPING FOR ANDROID TABLETS
Android Is a Java Operating System
Your Tools and Your First Android App
Prerequisites and Getting Ready
Toolchain Test Drive
One Code-Base for All Types of Devices
Getting Started with the Code Framework Example
Automatically Adapting to Screen Size
Components, Views, and Lifecycle
Destroying and Re-Creating Components
The MainActivity Class
Activity: The Basic Unit of User Interaction
Fragment: A Tool for Organizing Code and UI
The PickFragment Class
The ItemFragment Class
The ItemDetailFragment Class
Tying Together Activities, Fragments,
and the Action Bar
The TabbedActivity Class
A Main.xml File for Large Tablets
A Main.xml and a Subsidiary Activity for Smaller Screens
The TabActivity Class
The Android Task and Process Model
Starting Dalvik Instances
Death, but No Transﬁguration
Tasks Span Applications and Processes
Multiprocessing, Security, and Lifecycle
The Process and User ID as Security Boundary
Declaring Application Properties
CHAPTER 2: THE RELATIONAL MODEL AND SQLITE
Databases and the Relational Model
The History of the RDBMS
The Relational Model
Other DBMS Features
The SQL Language
Introduction to SQLite
SQLite from the Command Line
An Example SQLite Database
CHAPTER 3: ANDROID DATABASE SUPPORT
SQL in Java: The SQLiteDatabase Class
Basic SQL Embedding
Creating a Database: The SQLiteOpenHelper Class
Managing a Database
Cursors, Loaders, and Adapters
Adapters and View Binders
CHAPTER 4: CONTENT PROVIDERS
Using a Content Provider
URIs as Names for Virtual Datasets
Content Resolvers: The Link between Clients and Providers
Content Observers: Completing the Loop
IPC: System-Wide Accessibility
The Contract: URIs and Types
Virtual Table URIs
Return Value MIME Types
Publishing the Contract
Implementing the Content Provider
Creating the Content Provider
Return Types and the URI Matcher
Writing the Database
Content Observers (Again)
Permissions and Registration
Content Providers and Files
CHAPTER 5: REST, CONTENT PROVIDERS, CONCURRENCY,
NETWORKING, AND SYNC ADAPTERS
REST over HTTP
An Example REST API
Contact Methods and URIs
The Apache Libraries
The java.net Libraries
Considering Concurrency and Lifecycles
The Android Concurrency Architecture
A Naive Request
An Architecture for Robust Networking
Approach 1: Service-Centric
Approach 2: ContentProvider-Centric
Approach 3: SyncAdapter-Centric
REST within Android
The restfulCachingProviderContacts Project: An Example Client
Adding a Contact
Using Sync Adapters
Android Account Management
Creating a Sync Adapter
CHAPTER 6: SERVICE DEVELOPMENT
A Choice for Service Development
The Lifecycle of a Request
Three-Tier Service Architecture
Service Development Background
Building a RESTful Service for Contacts
A Conservative Software Stack
Writing the Examples: Spring Contacts Service
and Its Synchronization Variant
Code Example: Spring Sync Contacts Service
CHAPTER 7: MOBILE AND THE CLOUD
Cloud Performance and Scalability
The Scale of Mobile
Persistence in the Cloud: From SQL to NoSQL
Database File Format
Design Considerations for Scalable Persistence
To SQL or Not to SQL?
Looking at Popular Cloud Providers
Google App Engine
Joyent: Hosted MongoDB+node.js
Red Hat OpenShift
Exploring the Code Examples
The Contacts DAO Interface (Again)
Writing the Code: Amazon Contacts Service
Writing the Code: Google App Engine Contacts
CHAPTER 8: COMPLEX DEVICE-BASED DATA:
PIM Databases: Fossils from Smartphone Pre-History
Android’s Contacts Provider
The ContactsContract API
A Contacts Provider Explorer
Code for Exploring a Database
Source Code for a Contacts Provider Explorer
CHAPTER 9: GENERIC DATA SYNCHRONIZATION:
PROJECT MIGRATE AND THE WEBDATA API
Introducing WebData and Project Migrate
How Project Migrate Works
How Project Migrate Streamlines the Mobile Connection
to the Enterprise
The WebData API in Detail
The WebData API RESTful Protocol
Project Migrate in Detail
The Migrate Project Android WebData Client
Project Migrate Android Features
The WebData Content Provider Android API
Android Built-In Provider APIs
The Migrate Provider API
CHAPTER 10: WEBDATA APPLICATIONS
The Migrate Client
Creating a Migrate Project
Step 1: Importing the Project
Step 2: Enabling the Project as a Migrate Client
Step 3: Deﬁning the Information to Be Managed by Migrate
Step 4: Generating the Contacts Contract
Interfacing with the Migrate REST Proxy
Step 5: Starting a Local Migrate Service
Step 6: Publishing Your Application’s Schema
Setting Up a Device
Step 1: Installing the Migrate Client
Step 2: Adding a WebData Account
Step 3: Turning on Synchronization
Step 4: Running the Application
Step 5: Conﬁguring an Account in Migrate Contacts (Optional)
Future Directions: MigrateClinic
CHAPTER 11: BUILDING HUMAN INTERFACES FOR DATA
Modularity and Flexibility Compared
with a “Cookbook” Approach
Overview of Modules
The TabbedActivity Class
The TabbedPagedFragment Class
Multitasking in a Small-Screen Environment
The Android Task Model
Tasks and the Conventional Process Model
Modifying Task Behavior
Navigation in Tablets
Choosing to Use the Support Package
CHAPTER 12: SECURITY
Keeping Handsets Safe
Avoiding Malicious Applications
Understand Malware Mechanics: The Malware Genome
Writing Secure Applications
Ingredients of a Secure Application
Example Code: Protecting RESTful Invocations
MANY ENTERPRISE-ORIENTED APPLICATIONS fit a broad template: They access data using one or
more RESTful APIs. They present the data to the user. They may enable the user to modify the data,
and update the data on servers. Enterprise Android is a book about those applications.
WHO THIS BOOK IS FOR
apps should work. You can correctly think of Android as a Java OS: You write apps in Java and
deploy them to an environment that, in some ways, very closely resembles a Java VM. These apps
communicate with RESTful APIs to fetch data to present to the user.
But, as with many aspects of Android software development, it pays to look at how Android is
designed before wading in. This book was created to give you a substantial head start at applying
your experience with RESTful applications and APIs to creating Android apps that are efficient,
versatile, and responsive. You will avoid the pitfalls of assuming Android programming is like web
programming or client Java programming using Oracle’s class libraries, and be able to do it using
Android APIs effectively on the fi rst try.
If you are a beginning Android programmer, and do not have significant experience with iOS or Java,
or if you are unsure that RESTful applications are what you need to learn about, you should start with
a general introduction to Android. Beginners will appreciate a book like Reto Meier’s excellent
Professional Android 4 Application Development (John Wiley & Sons, 2012) or the online tutorials
at developer.android.com, which are much improved compared to the early days of Android.
If you are interested in expanding your development horizon beyond device programming by pushing into service-side development, this book builds competence handling application data on both
sides of the network.
WHAT THIS BOOK COVERS
This book starts with the basics of creating an Enterprise-oriented Android app that can run on
handsets and tablets. But it’s not a beginner’s book. You should, at least, read the online tutorials at
Google’s Android Developer’s site before reading this book.
Android uses SQLite, and this book covers SQL and SQLite in enough depth that you will
understand how data is stored in SQLite databases in Android systems.
Android wraps SQLite in database classes, and this book covers those classes in depth, as well.
When apps make use of data in the Android environment, they often use a specialized service
component called a ContentProvider. This class, and the related ContentResolver class, provide
a REST-like interface to data within an Android device. Using these classes has other advantages in
building apps that use the observer pattern.
Enabling you to implement an end-to-end observer pattern is a key element of this book. Your data
resides in a database behind a RESTful API on your servers. Locally, it is likely to be stored in a
SQLite database inside a ContentProvider component. This book shows you how to make sure the
data you present to the user is consistent and up to date.
Simplicity is important, too. JSON is a simple way to represent data with simplicity and flexibility
where, otherwise, a complex database design might be required. This book shows you how to use JSON
with SQLite to maintain simplicity in your implementation. It also shows you a complex Android database and ContentProvider interface, implemented with a conventional approach to database design.
You will create and deploy a server for your front end as you use the examples in this book. In
particular, Chapters 5 and 6 come together at the end of Chapter 6 to form an end-to-end example
of the techniques covered in this book. You’ll deploy this service on Amazon and Google cloud
resources in Chapter 7.
One thing you won’t spend much time on is loading indicators. A networked app should be as responsive as a “local” app. Create, update, and delete (CRUD) should not be interposed between the user and
the data the user wants. A very important part of this book explains how to keep CRUD off the network and out of the user’s way, using a lightweight but powerful synchronization protocol. The book
completes this approach by introducing an open source framework that encapsulates this approach.
The book concludes with an in-depth tour of Android security.
HOW THIS BOOK IS STRUCTURED
This book is called Enterprise Android because it is about acquiring, presenting, and updating data
on devices and using cloud resources, which is the core of most enterprise applications.
This book starts with a brisk-paced introduction to Android programming that puts you on track to make
an application for displaying data. This is about as fast an introduction as can be, so don’t be surprised if
you need to go to the online tutorials in the Android documentation to go deeper on some basics.
Following this introduction, you will be immersed in the core subject matter of this book: data. The
book progresses from the bottom up: how to store data locally, how to make queries, how to get it
and serve it from REST APIs, how the observer pattern is implemented in Android idioms, how to
update it, and how to make this all happen with or without connectivity and with the best apparent
performance. Later in the book, more UI programming oriented toward presenting data is covered.
The book closes with a chapter on security.
WHAT YOU NEED TO USE THIS BOOK
This book is about Android software development, and the examples in it require the use of the
Android software development kit (SDK), which is available from developer.android.com. The
SDK is compatible with the three most widely used desktop operating systems: Windows, Mac OS
X, and Linux. You may prefer to use an Android device to run the example code, but you can use an
emulator, included in the SDK, running on your desktop computer.
NOTE Database code in Android has been very stable for several versions of
the Android OS. Mostly due to the way we cover user interface for database
apps, this book assumes you will run your programs on Android 4 or later
versions. You can expect most of this book to remain current for future version
To run the service examples in the book, you’ll need to download the packages in each chapter,
including the following: Apache Tomcat, ant, MySQL, and the cygwin toolkit. You’ll also need
an Amazon AWS account with manager privileges and a Google account.
To help you get the most from the text and keep track of what’s happening, you’ll see a number of
conventions throughout the book.
WARNING Warnings like this one hold important, not-to-be forgotten information that is directly relevant to the surrounding text.
NOTE Notes offer tips, hints, tricks, and asides to the current discussion.
As for styles in the text:
New terms and important words are highlighted when they are introduced.
Keyboard strokes appear like this: Ctrl+A.
Filenames, URLs, and code within the text appear like so: persistence.properties.
Code appears in two different ways:
We use a monofont type with no highlighting for most code examples.
We use bold to emphasize code that’s particularly important in the present context.
As you read the chapters in this book, you will want to run, inspect, and perhaps modify the source
code fi les that accompany the book. Please note that all the code examples in this chapter are available at https://github.com/wileyenterpriseandroid/Examples.git and as a part of the
book’s code download at www.wrox.com on the Download Code tab.
To fi nd the source code via the Wrox site, locate the book’s title (either by using the Search box or
by using one of the title lists) and click the Download Code link on the book’s detail page to obtain
all the source code for the book.
NOTE Because many books have similar titles, you may fi nd it easiest to search
by ISBN; this book’s ISBN is 978-1-118-18349-6
Alternately, you can go to the main Wrox code download page at http://www.wrox.com/dynamic/
books/download.aspx to see the code available for this book and all other Wrox books.
We make every effort to ensure that there are no errors in the text or in the code. However, no one
is perfect, and mistakes do occur. If you fi nd an error in one of our books, like a spelling mistake or
faulty piece of code, we would be very grateful for your feedback. By sending in errata you may save
another reader hours of frustration and at the same time you will be helping us provide even higher
To find the errata page for this book, go to http://www.wrox.com and locate the title using the Search
box or one of the title lists. Then, on the book details page, click the Book Errata link. On this page
you can view all errata that has been submitted for this book and posted by Wrox editors.
NOTE A complete book list including links to each book’s errata is also available
If you don’t spot “your” error on the Book Errata page, go to www.wrox.com/contact/techsupport
.shtml and complete the form there to send us the error you have found. We’ll check the information
and, if appropriate, post a message to the book’s errata page and fix the problem in subsequent editions of the book.
For author and peer discussion, join the P2P forums at p2p.wrox.com. The forums are a web-based
system for you to post messages relating to Wrox books and related technologies and interact with
other readers and technology users. The forums offer a subscription feature to e-mail you topics
of interest of your choosing when new posts are made to the forums. Wrox authors, editors, other
industry experts, and your fellow readers are present on these forums.
At http://p2p.wrox.com you will fi nd a number of forums that will help you not only as you read
this book, but also as you develop your own applications. To join the forums, just follow these steps:
Go to p2p.wrox.com and click the Register link.
Complete the required information to join as well as any optional information you wish to
provide and click Submit.
You will receive an e-mail with information describing how to verify your account and complete the joining process.
NOTE You can read messages in the forums without joining P2P, but in order to
post your own messages, you must join.
Once you join, you can post new messages and respond to messages other users post. You can read
messages at any time on the web. If you would like to have new messages from a particular forum
e-mailed to you, click the Subscribe to this Forum icon by the forum name in the forum listing.
For more information about how to use the Wrox P2P, be sure to read the P2P FAQs for answers to
questions about how the forum software works as well as many common questions specific to P2P
and Wrox books. To read the FAQs, click the FAQ link on any P2P page.