Write a Program to Create Grade Report Using Content Providers in Android

Here is source code of the Program to Create Grade Report Using Content Providers in Android. The program is successfully compiled and run on a Windows system using Eclipse Ide. The program output is also shown below.

MainActivity.java

package com.example.mycontentprovider1;
https://www.sanfoundry.com/wp-admin/post.php?post=27220&action=edit#
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
 
public class MainActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
 
    public void onClickAddRecord(View view) {
        // Adding a new record
        ContentValues values = new ContentValues();
 
        values.put(ReportProvider.NAME,
                ((EditText) findViewById(R.id.CourseName)).getText().toString());
 
        values.put(ReportProvider.GRADE,
                ((EditText) findViewById(R.id.txtGrade)).getText().toString());
 
        Uri uri = getContentResolver().insert(ReportProvider.CONTENT_URI,
                values);
 
        Toast.makeText(getBaseContext(), uri.toString(), Toast.LENGTH_LONG)
                .show();
    }
 
    public void onClickRetrieveRecords(View view) {
        // Retrieve all records
        String URL = "content://com.example.provider.Report/students";
        Uri var = Uri.parse(URL);
        Cursor c = managedQuery(var, null, null, null, "name");
        if (c.moveToFirst()) {
            do {
                Toast.makeText(
                        this,
                        c.getString(c.getColumnIndex(ReportProvider._ID))
                                + ", "
                                + c.getString(c
                                        .getColumnIndex(ReportProvider.NAME))
                                + ", "
                                + c.getString(c
                                        .getColumnIndex(ReportProvider.GRADE)),
                        Toast.LENGTH_SHORT).show();
            } while (c.moveToNext());
        }
    }
 
}

ReportProvider.java

 
<pre lang="xml" cssfile="hk1_style">
package com.example.mycontentprovider1;
 
import java.util.HashMap;
 
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.text.TextUtils;
 
public class ReportProvider extends ContentProvider {
 
    static final String PROVIDER_NAME = "com.example.provider.Report";
    static final String URL = "content://" + PROVIDER_NAME + "/students";
    static final Uri CONTENT_URI = Uri.parse(URL);
 
    static final String _ID = "_id";
    static final String NAME = "name";
    static final String GRADE = "grade";
 
    private static HashMap<String, String> PROJECTION_MAP;
 
    static final int STUDENTS = 1;
    static final int STUDENT_ID = 2;
 
    static final UriMatcher uriMatcher;
    static {
        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
        uriMatcher.addURI(PROVIDER_NAME, "students", STUDENTS);
        uriMatcher.addURI(PROVIDER_NAME, "students/#", STUDENT_ID);
    }
 
    private SQLiteDatabase db;
    static final String DATABASE_NAME = "College";
    static final String TABLE_NAME = "students";
    static final int DATABASE_VERSION = 1;
    static final String CREATE_DB_TABLE = " CREATE TABLE "
            + TABLE_NAME + " (_id INTEGER PRIMARY KEY AUTOINCREMENT, "
            + " name TEXT NOT NULL, " + " grade TEXT NOT NULL);";
 
    private static class DatabaseHelper extends SQLiteOpenHelper {
        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
 
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(CREATE_DB_TABLE);
        }
 
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
            onCreate(db);
        }
    }
 
    @Override
    public boolean onCreate() {
        Context context = getContext();
        DatabaseHelper dbHelper = new DatabaseHelper(context);
        /*
         * Create a write-able database and would create it if the database
         * dosen't exists already
         */
        db = dbHelper.getWritableDatabase();
        return (db == null) ? false : true;
    }
 
    @Override
    public Uri insert(Uri uri, ContentValues values) {
        /*
         * Add a new student
         */
        long rowID = db.insert(TABLE_NAME, "", values);
        /*
         * If record is added successfully
         */
        if (rowID > 0) {
            Uri _uri = ContentUris.withAppendedId(CONTENT_URI, rowID);
            getContext().getContentResolver().notifyChange(_uri, null);
            return _uri;
        }
        throw new SQLException("Failed to add a record into " + uri);
    }
 
    @Override
    public Cursor query(Uri uri, String[] projection, String selection,
            String[] selectionArgs, String sortOrder) {
 
        SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
        qb.setTables(TABLE_NAME);
 
        switch (uriMatcher.match(uri)) {
        case STUDENTS:
            qb.setProjectionMap(PROJECTION_MAP);
            break;
        case STUDENT_ID:
            qb.appendWhere(_ID + "=" + uri.getPathSegments().get(1));
            break;
        default:
            throw new IllegalArgumentException("Unknown URI " + uri);
        }
        if (sortOrder == null || sortOrder == "") {
            // sort on the name of the courses
            sortOrder = NAME;
        }
        Cursor c = qb.query(db, projection, selection, selectionArgs, null,
                null, sortOrder);
 
        c.setNotificationUri(getContext().getContentResolver(), uri);
 
        return c;
    }
 
    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        int count = 0;
 
        switch (uriMatcher.match(uri)) {
        case STUDENTS:
            count = db.delete(TABLE_NAME, selection, selectionArgs);
            break;
        case STUDENT_ID:
            String id = uri.getPathSegments().get(1);
            count = db.delete(TABLE_NAME, _ID
                    + " = "
                    + id
                    + (!TextUtils.isEmpty(selection) ? " AND (" + selection
                            + ')' : ""), selectionArgs);
            break;
        default:
            throw new IllegalArgumentException("Unknown URI " + uri);
        }
 
        getContext().getContentResolver().notifyChange(uri, null);
        return count;
    }
 
    @Override
    public int update(Uri uri, ContentValues values, String selection,
            String[] selectionArgs) {
        int count = 0;
 
        switch (uriMatcher.match(uri)) {
        case STUDENTS:
            count = db.update(TABLE_NAME, values, selection,
                    selectionArgs);
            break;
        case STUDENT_ID:
            count = db.update(
                    TABLE_NAME,
                    values,
                    _ID
                            + " = "
                            + uri.getPathSegments().get(1)
                            + (!TextUtils.isEmpty(selection) ? " AND ("
                                    + selection + ')' : ""), selectionArgs);
            break;
        default:
            throw new IllegalArgumentException("Unknown URI " + uri);
        }
        getContext().getContentResolver().notifyChange(uri, null);
        return count;
    }
 
    @Override
    public String getType(Uri uri) {
        switch (uriMatcher.match(uri)) {
        /**
         * Get all records
         */
        case STUDENTS:
            return "vnd.android.cursor.dir/vnd.example.students";
            /**
             * Get a particular record
             */
        case STUDENT_ID:
            return "vnd.android.cursor.item/vnd.example.students";
        default:
            throw new IllegalArgumentException("Unsupported URI: " + uri);
        }
    }
}

Activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Subject/Course" />
 
    <EditText
        android:id="@+id/CourseName"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
 
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Grade" />
 
    <EditText
        android:id="@+id/txtGrade"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
 
    <Button
        android:id="@+id/btnAdd"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="onClickAddRecord"
        android:text="Add " />
 
    <Button
        android:id="@+id/btnRetrieve"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="onClickRetrieveRecords"
        android:text="Retrieve " />
 
</LinearLayout>

AndoridManifest.xml

advertisement
advertisement
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mycontentprovider1"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.mycontentprovider1.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 
        <provider
            android:name="ReportProvider"
            android:authorities="com.example.provider.Task" >
        </provider>
    </application>
 
</manifest>

gradecontentprovider

gradecontentprovider1

gradecontentprovider2

Sanfoundry Global Education & Learning Series – 100+ Java Android Tutorials.

advertisement
If you wish to look at all Tutorials, go to Java Android Tutorials.

If you find any mistake above, kindly email to [email protected]

advertisement
advertisement
Subscribe to our Newsletters (Subject-wise). Participate in the Sanfoundry Certification contest to get free Certificate of Merit. Join our social networks below and stay updated with latest contests, videos, internships and jobs!

Youtube | Telegram | LinkedIn | Instagram | Facebook | Twitter | Pinterest
Manish Bhojasia - Founder & CTO at Sanfoundry
Manish Bhojasia, a technology veteran with 20+ years @ Cisco & Wipro, is Founder and CTO at Sanfoundry. He lives in Bangalore, and focuses on development of Linux Kernel, SAN Technologies, Advanced C, Data Structures & Alogrithms. Stay connected with him at LinkedIn.

Subscribe to his free Masterclasses at Youtube & discussions at Telegram SanfoundryClasses.