1
edit
Changes
no edit summary
=== Database Helper ===
Add in the following code:
<pre>
package dps914.team5.lab3;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DAL {
private static final String TAG = DAL.class.getSimpleName();
private static final String DATABASE_NAME = "mybooks.db";
private static final String DATABASE_TABLE = "mybooks_table";
private static final int DATABASE_VERSION = 1;
private static final String CREATE_TABLE = "create table " + DATABASE_TABLE
+ " (_id integer primary key autoincrement, " + "name text not null,"
+ "author text," + "publisher text," + "category text" + ");";
private Context ctx;
private SQLiteDatabase db;
private OpenHelper oh;
public static final String KEY_NAME = "name";
public static final String KEY_AUTHOR = "email_address";
public static final String KEY_PUBLISHER = "mobile";
public static final String KEY_CATEGORY = "home_address";
public static final String KEY_ROW_ID = "_id";
private static final String QUERY_NAME = "SELECT _id, name from "
+ DATABASE_TABLE + " WHERE " + KEY_NAME + " LIKE ?";
public DAL(Context context) {
ctx = context;
}
public DAL open() {
try {
oh = new OpenHelper(ctx);
db = oh.getWritableDatabase();
return this;
} catch (SQLException e) {
Log.d(TAG, "OPEN: failed ");
return null;
}
}
public void close() {
oh.close();
}
public Long createBook(String name, String emailAddress, String mobile,
String homeAddress) {
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_NAME, name);
initialValues.put(KEY_AUTHOR, emailAddress);
initialValues.put(KEY_PUBLISHER, mobile);
initialValues.put(KEY_CATEGORY, homeAddress);
return db.insert(DATABASE_TABLE, null, initialValues);
}
public void deleteBook(long rowId) {
db.delete(DATABASE_TABLE, KEY_ROW_ID + "=" + rowId, null);
}
public Cursor getAllBooks() {
try {
return db.query(DATABASE_TABLE, new String[]{KEY_ROW_ID, KEY_NAME,
KEY_AUTHOR, KEY_PUBLISHER, KEY_CATEGORY}, null, null, null, null,
null);
} catch (SQLiteException e) {
Log.e(TAG, "Exception on query ALL BOOKS");
return null;
}
}
public Cursor getBook(long rowId) throws SQLException {
Cursor c = db.query(true, DATABASE_TABLE, new String[]{KEY_ROW_ID,
KEY_NAME, KEY_AUTHOR, KEY_PUBLISHER, KEY_CATEGORY}, KEY_ROW_ID + "="
+ rowId, null, null, null, null, null);
if (c != null) {
c.moveToFirst();
}
return c;
}
public Cursor getAllBooks(String name) {
try {
Cursor c = db.rawQuery(QUERY_NAME, new String[]{name});
return c;
} catch (SQLiteException e) {
Log.e(TAG, "Exception on query ALL BOOKS");
return null;
}
}
public boolean updateBook(long rowId, String name, String emailAddress,
String mobile, String homeAddress) {
ContentValues cv = new ContentValues();
cv.put(KEY_NAME, name);
cv.put(KEY_AUTHOR, emailAddress);
cv.put(KEY_PUBLISHER, mobile);
cv.put(KEY_CATEGORY, homeAddress);
return db.update(DATABASE_TABLE, cv, KEY_ROW_ID + "=" + rowId, null) > 0;
}
private static class OpenHelper extends SQLiteOpenHelper {
public OpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(TAG, "onCreate sql " + CREATE_TABLE);
db.execSQL(CREATE_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
onCreate(db);
}
}
}
</pre>
=== First Activity Code - Book Manager ===
<pre>
package dps914.team5.lab3;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ListAdapter;
import android.widget.SimpleCursorAdapter;
public class team5lab extends ListActivity {
private DAL h;
private Cursor c;
private static final String TAG = team5lab.class.getSimpleName();
private static final int ACTIVITY_CREATE = 0;
private static final int ACTIVITY_EDIT = 1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.show_books);
h = new DAL(team5lab.this);
h.open();
displayData();
registerForContextMenu(getListView());
}
private void displayData() {
c = h.getAllBooks();
startManagingCursor(c);
ListAdapter adapter = new SimpleCursorAdapter(this,
R.layout.book_row, c, new String[] {
DAL.KEY_NAME, DAL.KEY_AUTHOR,
DAL.KEY_ROW_ID }, new int[] { R.id.name, R.id.author });
setListAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.create_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.book_create:
Log.d(TAG, "onOptItemSelected-create");
Intent i = new Intent(this, EditBookActivity.class);
startActivityForResult(i, ACTIVITY_CREATE);
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch (item.getItemId()) {
case R.id.book_delete:
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
.getMenuInfo();
h.deleteBook(info.id);
displayData();
return true;
case R.id.book_update:
Intent i = new Intent(this, EditBookActivity.class);
AdapterContextMenuInfo infoItem = (AdapterContextMenuInfo) item
.getMenuInfo();
i.putExtra(DAL.KEY_ROW_ID, infoItem.id);
startActivityForResult(i, ACTIVITY_EDIT);
Log.d(TAG, "Update Contact Info");
return true;
}
return super.onMenuItemSelected(featureId, item);
}
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
displayData();
}
}
</pre>
== First Activity Layout ==
<pre>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/titleTextView"
android:text="@string/titleTextView" android:textStyle="bold"
android:textSize="20dp" android:gravity="center_vertical"
android:layout_gravity="center"></TextView>
<LinearLayout android:orientation="horizontal"
android:layout_width="fill_parent" android:layout_height="wrap_content">
<EditText android:id="@+id/searchText" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_weight="1" />
<Button android:id="@+id/searchButton" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="@string/searchButton" />
</LinearLayout>
<ListView android:layout_width="fill_parent"
android:layout_height="fill_parent" android:id="@+id/android:list"/>
</LinearLayout>
</pre><br/>
And a list layout:<br/>
<pre>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:layout_gravity="fill_horizontal">
<TextView android:id="@+id/name" android:text="@string/view_name"
android:layout_gravity="left" android:height="30dp"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_weight=".60" />
<TextView android:layout_height="wrap_content" android:id="@+id/author"
android:text="@string/view_author" android:layout_width="wrap_content"
android:layout_gravity="right" android:layout_weight=".40" />
</LinearLayout>
</pre>
== First Activity Menus ==
<pre>
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/book_create" android:title="Create Book"></item>
</menu>
</pre>
== First Activity Context Menu ==
<pre>
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="@string/menu_update" android:id="@+id/book_update" />
<item android:title="@string/menu_delete" android:id="@+id/book_delete" />
</menu>
</pre>
=== Edit Activity Code ===
<pre>
package dps914.team5.lab3;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class EditBookActivity extends Activity {
private final static String TAG = EditBookActivity.class.getSimpleName();
private DAL h;
private Long rowId;
private String name;
private String emailAddress;
private String phone;
private String homeAddress;
private EditText nameEditText;
private EditText emailAddressEditText;
private EditText phoneEditText;
private EditText homeAddressEditText;
private Button saveButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit_book);
h = new DAL(EditBookActivity.this);
h.open();
getWidgets();
rowId = (savedInstanceState == null) ? null : (Long) savedInstanceState
.getSerializable(DAL.KEY_ROW_ID);
if (rowId == null) {
Bundle extras = getIntent().getExtras();
rowId = extras != null
? extras.getLong(DAL.KEY_ROW_ID)
: null;
}
fillContactInfo();
saveButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
setResult(RESULT_OK);
finish();
}
});
}
private void fillContactInfo() {
if (rowId != null) {
Cursor c = h.getBook(rowId);
startManagingCursor(c);
nameEditText.setText(c.getString(c
.getColumnIndexOrThrow(DAL.KEY_NAME)));
emailAddressEditText.setText(c.getString(c
.getColumnIndexOrThrow(DAL.KEY_AUTHOR)));
phoneEditText.setText(c.getString(c
.getColumnIndexOrThrow(DAL.KEY_PUBLISHER)));
homeAddressEditText.setText(c.getString(c
.getColumnIndexOrThrow(DAL.KEY_CATEGORY)));
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
saveState();
outState.putSerializable(DAL.KEY_ROW_ID, rowId);
}
@Override
protected void onPause() {
super.onPause();
saveState();
}
@Override
protected void onResume() {
super.onResume();
fillContactInfo();
}
private void saveState() {
name = nameEditText.getText().toString();
emailAddress = emailAddressEditText.getText().toString();
phone = phoneEditText.getText().toString();
homeAddress = homeAddressEditText.getText().toString();
if (rowId == null) {
long id = h.createBook(name, emailAddress, phone, homeAddress);
if (id > 0) {
rowId = id;
}
Log.d(TAG, "INSERT ROW " + rowId);
} else {
h.updateBook(rowId, name, emailAddress, phone, homeAddress);
}
}
private void getWidgets() {
nameEditText = (EditText) findViewById(R.id.name_editText);
emailAddressEditText = (EditText) findViewById(R.id.author_editText);
phoneEditText = (EditText) findViewById(R.id.publisher_editText);
homeAddressEditText = (EditText) findViewById(R.id.category_editText);
saveButton = (Button) findViewById(R.id.saveContact_button);
}
}
</pre>
== Edit Activity Layouts ==
<pre>
<?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="match_parent"
android:orientation="vertical">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/titleTextView"
android:gravity="center_vertical" android:textSize="30dp"
android:text="" android:layout_gravity="center"></TextView>
<EditText android:layout_width="match_parent"
android:layout_height="wrap_content" android:id="@+id/name_editText"
android:hint="Title" android:layout_marginBottom="3dp"></EditText>
<EditText android:layout_width="match_parent"
android:layout_height="wrap_content" android:id="@+id/author_editText"
android:hint="Author" android:isScrollContainer="true"
android:layout_marginBottom="3dp"></EditText>
<EditText android:layout_width="match_parent"
android:layout_height="wrap_content" android:id="@+id/publisher_editText"
android:layout_marginBottom="3dp" android:hint="Publisher"></EditText>
<EditText android:layout_width="match_parent"
android:layout_height="wrap_content" android:id="@+id/category_editText"
android:layout_marginBottom="3dp" android:hint="Category"></EditText>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/saveContact_button"
android:text="Save" android:gravity="center_horizontal"
android:layout_gravity="center_horizontal" android:textSize="20dp"></Button>
</LinearLayout>
</pre>