How to Make Android Apps 20

How to Make Android Apps 20In this part of my Android tutorial we will cover using SQLite. We’ll create the database, verify its creation, add data, delete data, display data and delete the database. We’ll also explore Cursors and more.

I structured the app so that it is both very easy to understand and so you’ll be able to cut and paste out the features you need for your apps. I also have an SQLite tutorial that you’ll find very useful.

If you like videos like this, it helps to tell others with a click here [googleplusone]

Code From the Video

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Create Database"
        android:id="@+id/createDBButton"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:onClick="createDatabase"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Add Contact"
        android:id="@+id/addContactButton"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/createDBButton"
        android:layout_toEndOf="@+id/createDBButton"
        android:layout_marginLeft="10dp"
        android:onClick="addContact"
        android:clickable="false" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Delete Contact"
        android:id="@+id/deleteContactButton"
        android:layout_below="@+id/createDBButton"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:onClick="deleteContact"
        android:clickable="false"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Get Contacts"
        android:id="@+id/getContactsButton"
        android:layout_below="@+id/createDBButton"
        android:layout_toRightOf="@+id/deleteContactButton"
        android:layout_toEndOf="@+id/deleteContactButton"
        android:layout_marginLeft="10dp"
        android:onClick="getContacts"
        android:clickable="false"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/nameEditText"
        android:layout_below="@+id/deleteContactButton"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:hint="Name"
        android:layout_marginTop="5dp"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/emailEditText"
        android:layout_below="@+id/nameEditText"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:hint="Email"
        android:layout_marginTop="5dp"
        android:inputType="textEmailAddress"/>

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:ems="10"
        android:id="@+id/idEditText"
        android:layout_below="@+id/emailEditText"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:hint="ID to Delete"
        android:layout_marginTop="5dp"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Delete Database"
        android:id="@+id/deleteDBButton"
        android:onClick="deleteDatabase"
        android:layout_below="@+id/idEditText"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:clickable="false" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textMultiLine"
        android:ems="10"
        android:id="@+id/contactListEditText"
        android:lines="8"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

</RelativeLayout>

MainActivity.java

package com.newthinktank.derekbanas.contacts;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.io.File;

public class MainActivity extends ActionBarActivity {

    SQLiteDatabase contactsDB = null;

    Button createDBButton, addContactButton, deleteContactButton, getContactsButton,
            deleteDBButton;
    EditText nameEditText, emailEditText, contactListEditText, idEditText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        createDBButton = (Button) findViewById(R.id.createDBButton);
        addContactButton = (Button) findViewById(R.id.addContactButton);
        deleteContactButton = (Button) findViewById(R.id.deleteContactButton);
        getContactsButton = (Button) findViewById(R.id.getContactsButton);
        deleteDBButton = (Button) findViewById(R.id.deleteDBButton);
        nameEditText = (EditText) findViewById(R.id.nameEditText);
        emailEditText = (EditText) findViewById(R.id.emailEditText);
        contactListEditText = (EditText) findViewById(R.id.contactListEditText);
        idEditText = (EditText) findViewById(R.id.idEditText);

    }

    public void createDatabase(View view) {

        try{

            // Opens a current database or creates it
            // Pass the database name, designate that only this app can use it
            // and a DatabaseErrorHandler in the case of database corruption
            contactsDB = this.openOrCreateDatabase("MyContacts", MODE_PRIVATE, null);

            // Execute an SQL statement that isn't select
            contactsDB.execSQL("CREATE TABLE IF NOT EXISTS contacts " +
                "(id integer primary key, name VARCHAR, email VARCHAR);");

            // The database on the file system
            File database = getApplicationContext().getDatabasePath("MyContacts.db");

            // Check if the database exists
            if (database.exists()) {
                Toast.makeText(this, "Database Created", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "Database Missing", Toast.LENGTH_SHORT).show();
            }

        }

        catch(Exception e){

            Log.e("CONTACTS ERROR", "Error Creating Database");

        }

        // Make buttons clickable since the database was created
        addContactButton.setClickable(true);
        deleteContactButton.setClickable(true);
        getContactsButton.setClickable(true);
        deleteDBButton.setClickable(true);

    }

    public void addContact(View view) {

        // Get the contact name and email entered
        String contactName = nameEditText.getText().toString();
        String contactEmail = emailEditText.getText().toString();

        // Execute SQL statement to insert new data
        contactsDB.execSQL("INSERT INTO contacts (name, email) VALUES ('" +
            contactName + "', '" + contactEmail + "');");

    }

    public void getContacts(View view) {

        // A Cursor provides read and write access to database results
        Cursor cursor = contactsDB.rawQuery("SELECT * FROM contacts", null);

        // Get the index for the column name provided
        int idColumn = cursor.getColumnIndex("id");
        int nameColumn = cursor.getColumnIndex("name");
        int emailColumn = cursor.getColumnIndex("email");

        // Move to the first row of results
        cursor.moveToFirst();

        String contactList = "";

        // Verify that we have results
        if(cursor != null && (cursor.getCount() > 0)){

            do{
                // Get the results and store them in a String
                String id = cursor.getString(idColumn);
                String name = cursor.getString(nameColumn);
                String email = cursor.getString(emailColumn);

                contactList = contactList + id + " : " + name + " : " + email + "\n";

                // Keep getting results as long as they exist
            }while(cursor.moveToNext());

            contactListEditText.setText(contactList);

        } else {

            Toast.makeText(this, "No Results to Show", Toast.LENGTH_SHORT).show();
            contactListEditText.setText("");

        }

    }

    public void deleteContact(View view) {

        // Get the id to delete
        String id = idEditText.getText().toString();

        // Delete matching id in database
        contactsDB.execSQL("DELETE FROM contacts WHERE id = " + id + ";");

    }

    public void deleteDatabase(View view) {

        // Delete database
        this.deleteDatabase("MyContacts");

    }

    @Override
    protected void onDestroy() {

        contactsDB.close();

        super.onDestroy();
    }

}

Leave a Reply

Your email address will not be published. Required fields are marked *