How to store data on Android devices

Date published: July 04, 2014
7 min read
Introduction

When developing a more serious Android application, there is a great need to store info about the app state, user profile, game scores, etc. Android provides several ways to accomplish this based on the app's needs (how much space is needed, whether the data should be private or public):

  • Shared Preferences
  • Internal Storage
  • External Storage
  • SQLite Database

Shared Preferences are used to persist a small amount of primitive data (int, float, boolean, string, etc) in the key-value format. They are stored even if the application is killed and despite the name, they are not only used to store the current user preferences. Any piece of info that is considered meaningful and helpful for the app can be stored as long as it is in the above specified format.

Internal and External Storage involves writing data to text files and storing them in the desired location. By default, they are saved in the former type of storage of the device and are private (the user and other apps cannot access them). They are lost when uninstalling the application. The latter type of storage can be a SD card and the data is public (the user can alter it if the USB mass storage is enabled).

As we can see the above methods have lots of disadvantages when dealing with more complex operations on persisted data. In this case, SQLite is used.

Android SQLite
OrmLite Solution

We will cover using SQLite Database with OrmLite. SQLite is a relational database management system contained in a C programming library. It is ACID(Atomicity, Consistency, Isolation, Durability - properties which make sure that database transactions are processed safely) and implements most of the SQL functionalities. For small apps, developers can work directly with the included android api for databases but this is quite inefficient for bigger and more complex database structure due to writing manual sql queries which slows down development. This is where OrmLite (Object Relational Mapping) comes in. It provides a lightweight functionality for persisting java objects to sql database whilst simplifying queries and scaling. Some features of OrmLite:

  • Mark classes to be persisted by using java annotations
  • Includes great DAO (Database Access Object) classes
  • Advanced query builders for custom sql queries
  • Support for foreign objects
  • Auto generates sql command to create and drop tables

More information about OrmLite and comprehensive tutorials and documentation at this link http://ormlite.com/.

Implementing a shopping app using OrmLite

To demonstrate the power of OrmLite, we will model and implement a shopping app. To simplify it, we will consider only the shopping lists with products. Also you should separate the classes that work with the database from the rest of the app to make it easier to manage. For example create a new folder in your module called db with two folders in it: model and data.

First of all, we will need to build our models (which will determine the logical structure of the database and in which manner the data can be stored, organized and manipulated). For that, we must determine the way in which our shopping lists will "interact" with  products (i.e. determining the relationship between these two models). As a rule of thumb, one should follow this pattern: A shopping list can have multiple products. A product can belong to multiple shopping lists. This is called a many to many relationship and the only way to implement it is to create a third model (table) in which we will store a shopping list and a product. (For more detail on database relationships this tutorial will prove very helpful: sql tutorial). As a result, all the information regarding a shopping list will be found in this third table by querying the database for a shopping list id. But if we stay and think a little about this method, we will see that all the data is scattered and spread across multiple table rows which defeats the purpose of OrmLite (that is to persist java objects).

Solving the many-to-many relationship is slightly different using OrmLite but more intuitively. The third model, let's call it ProductInList, is still necessary because we need something different to store the state of a product in a shopping list (checked, unchecked, quantity, etc). We will use the following structure available at https://assist-software.net/snippets/sqlite-database-ormlite.

The code is quite self explanatory and easy to understand. The novelty is the use of ForeignCollectionField. Instead of keeping all the data related to a shopping list spread across multiple models, we will keep it compact in the ShoppingList model. To also store the products that belong to a shopping list, OrmLite strongly recommends the use of ForeignCollectionField, basically a special type of array in which every member is of ProductInList type. This special array is handled in the background by OrmLite which automatically creates the foreign keys, intermediate helper tables, etc. It automates the hole process making it a lot easier to manage this kind of relationship. A side note: we still need to create the foreign keys in the ProductInList model in order for OrmLite to create a link between the models. (See in the above link about primary keys, foreign keys and designing relationships).

Another thing that worth mentioning is the power of Java annotations and the way they are handled by OrmLite. A change just in a single line of code will propagate throughout the hole database. If we later decide that we don't need any more the checked field, we can just simply remove the @DatabaseField annotation above the declaration of the field without breaking the code(setters, getters, functions that reference to this field, etc).

We haven't finished yet. The three files above should be put in the model folder inside db. Now we must create other classes which will handle all interactions with the database and models. These should be put inside the data folder. The code is available at https://assist-software.net/snippets/sqlite-database-ormlite

DatabaseManager.java is a standard file and DatabaseManager.java contains getters for our DAO objects (through which all interactions to actual tables and database is made) and of course methods OnCreate, OnUpgrade that are self explanatory. We can see that OrmLite has built in queries like createTableIfNotExists, dropTable which are very helpful and automates the process of creating, updating tables and upgrading the db version. (Without this one had to write manual sql queries which are very ugly in java code due to high rate of mistakes and low scaling. Slightly modifying a model enforces rewriting the sql queries ).

Next, we propose implementing some kind of repositories that will implement common database queries over the models, like get all entities, update/create/delete entity, find by id, etc. To accomplish this we need to create another three classes that should also reside in the data folder: ShoppingListRepository, ProductInListRepository, ProductRepository. Only the implementation of the ShoppingListRepository will be shown (we don't want to bore the reader since the other two are similar and can be implemented as a homework) at https://assist-software.net/snippets/sqlite-database-ormlite.

How to store data on Android devices

All the functions above implement simple database queries that are handled automatically by OrmLite through the DAO object. Inserting a record has never become so easy. No more hand-written sql queries, subjected to a lot of common mistakes and lack of scalability.

To make use of all this novel functionality in our shopping app main activity we will globally declare the repositories and an array to hold our shopping lists:https://assist-software.net/snippets/sqlite-database-ormlite

The above method of inserting a ProductInList in the  ForeignCollectionField is faster and is automatically handled by OrmLite. We could also do this directly by adding it through the theList. getProducts() returned object. It is up to the programmer but it should be done with care (more info here and here ). For the consistency and the scope of this tutorial we will leave as a homework to the reader implementing the actual views, methods, etc .  The code above should be regarded as a kind of helper "pseudo-code" and should not be taken as is. There are plenty of things to be done that are not covered in this tutorial.

Conclusion

In conclusion, OrmLite is a powerful ORM for Android that allow developers to store data on Android devices and write high quality code very fast. Also the "Lite" part is taken very serious. As a consequence it has also several disadvantages, but they seem nothing compared to the huge list of advantages that it provides.

Share on:

I have read and understood the ASSIST Software website's Terms of Use and Privacy Policy.

Want to stay on top of everything?

Get updates on industry developments and the software solutions we can now create for a smooth digital transformation.

Frequently Asked Questions

1. Can you integrate AI into an existing software product?

Absolutely. Our team can assess your current system and recommend how artificial intelligence features, such as automation, recommendation engines, or predictive analytics, can be integrated effectively. Whether it's enhancing user experience or streamlining operations, we ensure AI is added where it delivers real value without disrupting your core functionality.

2. What types of AI projects has ASSIST Software delivered?

We’ve developed AI solutions across industries, from natural language processing in customer support platforms to computer vision in manufacturing and agriculture. Our expertise spans recommendation systems, intelligent automation, predictive analytics, and custom machine learning models tailored to specific business needs.

3. What is ASSIST Software's development process?  

The Software Development Life Cycle (SDLC) we employ defines the stages for a software project. Our SDLC phases include planning, requirement gathering, product design, development, testing, deployment, and maintenance.

4. What software development methodology does ASSIST Software use?  

ASSIST Software primarily leverages Agile principles for flexibility and adaptability. This means we break down projects into smaller, manageable sprints, allowing continuous feedback and iteration throughout the development cycle. We also incorporate elements from other methodologies to increase efficiency as needed. For example, we use Scrum for project roles and collaboration, and Kanban boards to see workflow and manage tasks. As per the Waterfall approach, we emphasize precise planning and documentation during the initial stages.

5. I'm considering a custom application. Should I focus on a desktop, mobile or web app?  

We can offer software consultancy services to determine the type of software you need based on your specific requirements. Please explore what type of app development would suit your custom build product.   

  • A web application runs on a web browser and is accessible from any device with an internet connection. (e.g., online store, social media platform)   
  • Mobile app developers design applications mainly for smartphones and tablets, such as games and productivity tools. However, they can be extended to other devices, such as smartwatches.    
  • Desktop applications are installed directly on a computer (e.g., photo editing software, word processors).   
  • Enterprise software manages complex business functions within an organization (e.g., Customer Relationship Management (CRM), Enterprise Resource Planning (ERP)).

6. My software product is complex. Are you familiar with the Scaled Agile methodology?

We have been in the software engineering industry for 30 years. During this time, we have worked on bespoke software that needed creative thinking, innovation, and customized solutions. 

Scaled Agile refers to frameworks and practices that help large organizations adopt Agile methodologies. Traditional Agile is designed for small, self-organizing teams. Scaled Agile addresses the challenges of implementing Agile across multiple teams working on complex projects.  

SAFe provides a structured approach for aligning teams, coordinating work, and delivering value at scale. It focuses on collaboration, communication, and continuous delivery for optimal custom software development services. 

7. How do I choose the best collaboration model with ASSIST Software?  

We offer flexible models. Think about your project and see which model would be right for you.   

  • Dedicated Team: Ideal for complex, long-term projects requiring high continuity and collaboration.   
  • Team Augmentation: Perfect for short-term projects or existing teams needing additional expertise.   
  • Project-Based Model: Best for well-defined projects with clear deliverables and a fixed budget.   

Contact us to discuss the advantages and disadvantages of each model. 

1. Is ASSIST Software a reliable company for custom engineering?

Absolutely. Our partners have given us great recommendations and reviews, leading us to win The Manifest Award for Most Reviewed Software Developers. Further proof comes from our 97% employee retention rate and ongoing client partnerships for over 8 years.  

2. Are the ASSIST Software Romanian software engineers certified?

Yes. 85% of our software programmers are certified.  

At a company level, ASSIST Software is certified and recognized by industry players such as Microsoft, AWS, Google Cloud, Adobe, Drupal, Fujitsu, ISTQB, and others.  

Our employee certifications are tremendously important as they reflect the shared commitment to long-term growth.

3. Why should I choose Romania for custom software development? 

Romania has become a significant player in custom software development, attracting businesses worldwide. Romania boasts the highest number of certified IT specialists in Europe and ranks sixth globally, surpassing even the US in tech specialists per capita.  

At ASSIST Software, what sets us apart is our team and our location: our engineers are certified, experienced, and flexible, while being in the +2 GMT time zone allows us to easily facilitate meetings with clients all over the world.

4. What team will work on my project, and where will it be located?

ASSIST Software's headquarters is in Romania, a prime country for software development outsourcing. Our 350+ software engineers speak English and have a deep passion for innovation.  

We provide regular project updates through reports, meetings, and online dashboards. Generally, you'll have access to a dedicated project manager who will be your point of contact for any questions or concerns.  

5. How much will my project cost me?

Our prices are competitive, and as per our working model, we guarantee you will be satisfied with the result. Frequent meetings, check-ins, and a great communication structure will ensure this outcome.   

Project costs depend on various factors, including complexity, scope, required technologies, and team size. We'll gather detailed information about your project during the initial consultation to provide a customized quote and we guarantee that you will be able to see the benefits of bespoke software.  

1. What technologies do you work with?

ASSIST Software tackles your projects with a robust tech stack. We build native and cross-platform mobile apps, craft user-friendly web experiences, and create stunning visuals. 

Our wide-ranging expertise starts from Java, Python, and JavaScript frameworks to cutting-edge solutions like AR/VR, blockchain, and AI/ML. We also manage databases, leverage cloud platforms, and ensure flawless project execution. We're your one-stop shop for exceptional software development from concept to deployment. You can view our expertise for more details.   

2. Are you experienced in AI/ML development?

Yes. We have extensive experience in data engineering and machine learning operations (MLOps). We can employ neural networks, computer vision, and AI models to benefit your ideas.   

You can trust our long-term experience with big data, NLP, and sentiment analysis, as over the past three years, we led a European security project with 15 partners focused on detecting radicalization on social media and the dark web.

3. Do you have a research and development department and work on European Projects?

We know R&D is crucial for businesses to stay competitive and thrive in dynamic markets. Successful R&D efforts lead to developing exceptional products or services, improved efficiency and effectiveness in operations, and enhanced market positioning.   

We have established solid partnerships with 160+ European research companies, universities, and research centers (e.g., Fraunhofer, TWI, University of Heidelberg, REWE Group, SINTEF, etc.) and have participated as technical partners in over 25 EU-funded projects.  

4. Besides custom software solutions, what other services do you offer?

  • Design Thinking for Breakthrough Products:  

    We craft user experiences that resonate. Our design process is an immersive collaboration, starting with workshops to uncover your vision and user needs. We conduct market research, analyze the competition, and guide you toward cutting-edge solutions in accordance with your business requirements.  

  • Digital Transformation to Reimagine Your Business:

    Digital transformation is nothing less than a strategic shift. We empower you to become more agile and data-driven, optimizing core processes for the digital age.  

  • Scale with Confidence as We Build for Growth:  

    We understand that business success and development mean new challenges. Our solutions are built to scale seamlessly, accommodating increasing user bases and data volumes without sacrificing performance or security.  

5. As a company, does ASSIST have its own software products?

Yes, ASSIST Software teams have been involved in designing and developing innovative products that address community needs. One such example is the web and mobile platform Autisma. This therapy assistant enables continued learning for children diagnosed with autism spectrum disorder.   

Our extensive knowledge of the Unity and Unreal engines has allowed us to develop two mobile games, Elly and the Ruby Atlas and Hooman Invaders, as well as various Unity Assets, such as the Real-Time Weather PRO and Easy Sky. These two Unity assets allow Unity developers to control the weather and sky in their projects.   

1. Is ASSIST Software hiring right now?

We are always looking for great people to join our team, whether you're a senior software engineer or a new talent seeking an IT career. Please check our careers page and contact us. Our HR department will contact you as soon as possible.   

2. Is ASSIST Software organizing internships?

Yes. Each year, we organize individual and group internships for students. Our long-term partnership with the Stefan cel Mare University of Suceava allows us to put together great events for students and help them get started in the industry. 

3. What type of learning culture does ASSIST Software encourage?

Our focus on innovation comes from a 'can do' attitude and the continuous learning we encourage our colleagues to pursue. We frequently organize workshops, learning sessions, presentations, and masterclasses. All these events are free and open to our colleagues and aim to support their professional and personal development. 

4. How does ASSIST Software focus on teamwork?

The key to stellar teamwork is the quality time we spend together. ASSIST employees and their families are frequently invited to participate in all activities. We encourage a healthy lifestyle by promoting and organizing hikes, bike riding sessions, marathons, volleyball, football and tennis matches, ping-pong championships, and many more.   

We show our care for the environment through reforestation campaigns and forest cleaning activities.   

We also have an English-speaking club, e-sports gaming nights, tech discussions, networking parties, and board game sessions.   

5. How does ASSIST Software give back to the community?

Volunteering and charity are essential to us, which is why we founded the ASSIST Humanitarian Foundation. We genuinely care about our community and want to improve the future. We invest in IT equipment for schools and award excellent teachers. We also help hospitals and fire departments enter the 21st century.   

We sponsor cultural events and deliver humanitarian aid to those in need. If you agree with our views, you can also donate.   

ASSIST Software Team Members