0% found this document useful (0 votes)
15 views6 pages

Prac 19

The document outlines a practical exercise for creating a custom content provider in an Android application, including XML layout and Java code for the MainActivity and UsersProvider classes. It allows users to insert and retrieve names from a SQLite database using a user interface with buttons and text fields. The code demonstrates the implementation of basic CRUD operations within the content provider framework.

Uploaded by

Sumedh Raut
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
15 views6 pages

Prac 19

The document outlines a practical exercise for creating a custom content provider in an Android application, including XML layout and Java code for the MainActivity and UsersProvider classes. It allows users to insert and retrieve names from a SQLite database using a user interface with buttons and text fields. The code demonstrates the implementation of basic CRUD operations within the content provider framework.

Uploaded by

Sumedh Raut
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 6

dd

NAME: SUMEDH SANJAY RAUT


CLASS: CO6I(A)
ROLL NO: 532
SUBJECT: MAD(22617)

PRACTICAL NO: 19

X. Exercise
1. Write a program to create your own content provider to insert and access data in android
application.
Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
tools:context=".MainActivity"
android:orientation="vertical"
android:padding="20dp">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Enter Name Below!"
android:textColor="@color/black"
android:textSize="20sp"
android:layout_marginTop="30dp" />

<EditText
android:id="@+id/txtName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:layout_marginTop="10dp" />

<Button
android:id="@+id/btnAdd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Add User"
android:onClick="onClickAddDetails"
dd

android:layout_marginTop="20dp" />

<Button
android:id="@+id/btnRetrieve"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Show Users"
android:onClick="onClickShowDetails"
android:layout_marginTop="20dp" />

<TextView
android:id="@+id/res"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textColor="#A52A2A"
android:layout_marginTop="50dp" />

</LinearLayout>

MainActivity.java Program

package co6i.micro.project.practical19;

import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

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

@Override
dd

public boolean onTouchEvent(MotionEvent event) {


InputMethodManager imm = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
if (getCurrentFocus() != null) {
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
return true;
}

public void onClickAddDetails(View view) {


EditText txtName = findViewById(R.id.txtName);
String name = txtName.getText().toString().trim();

if (name.isEmpty()) {
Toast.makeText(this, "Please enter a name", Toast.LENGTH_SHORT).show();
return;
}

ContentValues values = new ContentValues();


values.put(UsersProvider.NAME, name);
getContentResolver().insert(UsersProvider.CONTENT_URI, values);
Toast.makeText(this, "New Record Inserted", Toast.LENGTH_LONG).show();
txtName.setText(""); // Clear the input field
}

public void onClickShowDetails(View view) {


TextView resultView = findViewById(R.id.res);
Cursor cursor = getContentResolver().query(UsersProvider.CONTENT_URI, null, null, null, null);

if (cursor != null && cursor.moveToFirst()) {


StringBuilder strBuild = new StringBuilder();
do {
strBuild.append("\n").append(cursor.getInt(cursor.getColumnIndex("id")))
.append(" - ").append(cursor.getString(cursor.getColumnIndex("name")));
} while (cursor.moveToNext());

resultView.setText(strBuild.toString());
cursor.close();
} else {
resultView.setText("No Records Found");
}
}
}
dd

UsersProvider.java

package co6i.micro.project.practical19;

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.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import java.util.HashMap;

public class UsersProvider extends ContentProvider {

static final String PROVIDER_NAME = "co6i.micro.project.practical19.UsersProvider";


static final String URL = "content://" + PROVIDER_NAME + "/users";
static final Uri CONTENT_URI = Uri.parse(URL);

static final String ID = "id";


static final String NAME = "name";
static final int URI_CODE = 1;
private static final UriMatcher uriMatcher;
private static HashMap<String, String> values;
private SQLiteDatabase db;

static final String DATABASE_NAME = "EmpDB";


static final String TABLE_NAME = "Employees";
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);";

static {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(PROVIDER_NAME, "users", URI_CODE);
uriMatcher.addURI(PROVIDER_NAME, "users/#", URI_CODE);
}

private static class DatabaseHelper extends SQLiteOpenHelper {


DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
dd

@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);
db = dbHelper.getWritableDatabase();
return db != null;
}

@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String
sortOrder) {
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
qb.setTables(TABLE_NAME);

if (uriMatcher.match(uri) == URI_CODE) {
qb.setProjectionMap(values);
} else {
throw new IllegalArgumentException("Unknown URI " + uri);
}

if (sortOrder == null || sortOrder.isEmpty()) {


sortOrder = ID;
}

Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, sortOrder);


if (c != null) {
c.setNotificationUri(getContext().getContentResolver(), uri);
}
return c;
}

@Override
public Uri insert(Uri uri, ContentValues values) {
dd

long rowID = db.insert(TABLE_NAME, null, values);


if (rowID > 0) {
Uri _uri = ContentUris.withAppendedId(CONTENT_URI, rowID);
getContext().getContentResolver().notifyChange(_uri, null);
return _uri;
}
throw new SQLiteException("Failed to add a record into " + uri);
}

@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
int count = db.update(TABLE_NAME, values, selection, selectionArgs);
getContext().getContentResolver().notifyChange(uri, null);
return count;
}

@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
int count = db.delete(TABLE_NAME, selection, selectionArgs);
getContext().getContentResolver().notifyChange(uri, null);
return count;
}

@Override
public String getType(Uri uri) {
return (uriMatcher.match(uri) == URI_CODE) ? "vnd.android.cursor.dir/users" : null;
}
}

Output:

You might also like