Full source code to create grocery list app using SQLite database
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
tools:context="com.example.application.grocerylist.MainActivity">
<EditText
android:id="@+id/edittext_name"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/textview_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/edittext_name"
android:layout_centerHorizontal="true"
android:layout_margin="8dp"
android:text="0"
android:textSize="50sp" />
<Button
android:id="@+id/button_decrease"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/textview_amount"
android:layout_alignBottom="@+id/textview_amount"
android:layout_toStartOf="@+id/textview_amount"
android:text="-" />
<Button
android:id="@+id/button_increase"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/textview_amount"
android:layout_alignBottom="@+id/textview_amount"
android:layout_toEndOf="@+id/textview_amount"
android:text="+" />
<Button
android:id="@+id/button_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/button_increase"
android:layout_alignBottom="@+id/button_increase"
android:layout_marginStart="8dp"
android:layout_toEndOf="@+id/button_increase"
android:text="add" />
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/textview_amount" />
</RelativeLayout>
grocery_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp">
<TextView
android:id="@+id/textview_amount_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:textSize="30sp" />
<TextView
android:id="@+id/textview_name_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="Empty Item"
android:textSize="30sp" />
</LinearLayout>
GroceryContract.java
package com.example.application.grocerylist;
import android.provider.BaseColumns;
public class GroceryContract {
private GroceryContract() {
}
public static final class GroceryEntry implements BaseColumns {
public static final String TABLE_NAME = "groceryList";
public static final String COLUMN_NAME = "name";
public static final String COLUMN_AMOUNT = "amount";
public static final String COLUMN_TIMESTAMP = "timestamp";
}
}
GroceryDBHelper.java
package com.example.application.grocerylist;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import com.example.application.grocerylist.GroceryContract.*;
public class GroceryDBHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "grocerylist.db";
public static final int DATABASE_VERSION = 1;
public GroceryDBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
final String SQL_CREATE_GROCERYLIST_TABLE = "CREATE TABLE " +
GroceryEntry.TABLE_NAME + " (" +
GroceryEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
GroceryEntry.COLUMN_NAME + " TEXT NOT NULL, " +
GroceryEntry.COLUMN_AMOUNT + " INTEGER NOT NULL, " +
GroceryEntry.COLUMN_TIMESTAMP + " TIMESTAMP DEFAULT CURRENT_TIMESTAMP" +
");";
db.execSQL(SQL_CREATE_GROCERYLIST_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + GroceryEntry.TABLE_NAME);
onCreate(db);
}
}