I've been struggling with this for a bit now and I would like to see if
anyone could point me in the right direction. First off, I'm developing this
with 1.5 as a target so I will be using some depreciated methods. I have
been working through the book "Android Apps for Absolute Beginners" not
because I don't know how to program, but because it's the only book I could
get my hands on.
Anyhow, when I got to chapter 10, the one where they start talking about
connecting to a database to quere, add, update, and delete records, I decide
to get creative. Right now, I have a basic ui conisiting of four buttons;
query (displays all the contacts in toast messages), add (puts a
contact into the database with the name in the "contactName" edit text
and phone number in the "contactPhone" edit text), update (takes the name of
a contact from the "contactName" edit text and attempts to update the number
when a contact is found with that name), and delete (finds a contact with
the name from the "contactName" editText and deletes the record).
So far, I have query and add working properly. However, my update button
does not work and throws an error. I've tried a few different, what I
thought was, creative solutions. So far I have nothing. I'll post my latest
attempt to get this to work and any feedback would be greatly appreciated.
<code>
package content.providers;
import android.app.Activity;
import android.os.Bundle;
import android.widget.*;
import android.telephony.PhoneNumberUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.net.Uri;
import android.database.Cursor;
import android.provider.Contacts.People;
import android.content.ContentUris;
import android.content.ContentValues;
public class DatabaseProviders extends Activity
{
// Called when the activity is first created.
@Override
public void onCreate(Bundle savedInstanceState)
{
// make instance of database providers and call main
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// create instances of the phone objects
// buttons
Button queryButton = (Button)findViewById(R.id.queryButton);
Button addContactButton
= (Button)findViewById(R.id.addContactButton);
Button updateContactButton
= (Button)findViewById(R.id.updateContactButton);
Button deleteContactButton
= (Button)findViewById(R.id.deleteContactButton);
// edit text
final EditText contactName
= (EditText)findViewById(R.id.contactName);
final EditText contactPhone
= (EditText)findViewById(R.id.contactPhone);
// on queryButton click
queryButton.setOnClickListener(new OnClickListener()
{
public void onClick(View view)
{
queryContacts();
}
});
// on addContactButton click
addContactButton.setOnClickListener(new OnClickListener()
{
public void onClick(View view)
{
// format the number to be proper NANP
PhoneNumberUtils.formatNanpNumber(contactPhone.getEditableText());
addContact(contactName.getText().toString(),contactPhone.getText().toString());
}
});
// on updateContactButton click
updateContactButton.setOnClickListener(new OnClickListener()
{
public void onClick(View view)
{
// format the number to be proper NANP
PhoneNumberUtils.formatNanpNumber(contactPhone.getEditableText());
updateContact(contactName.getText().toString(),contactPhone.getText().toString());
}
});
// on deleteContactButton click
deleteContactButton.setOnClickListener(new OnClickListener()
{
public void onClick(View view)
{
deleteContact(contactName.getText().toString());
}
});
}
protected void queryContacts()
{
// load projection and base uri for people table in contact
database
String[] cols = new String[] {People.NAME, People.NUMBER};
// run query
Cursor mqCur =
managedQuery(People.CONTENT_URI,cols,null,null,null);
// move to first record if database isn't empty
if (mqCur.moveToFirst())
{
// Declare values to hold field values
String myname = null;
String mynumber = null;
do
{
// get field values
myname =
mqCur.getString(mqCur.getColumnIndex(People.NAME));
mynumber =
mqCur.getString(mqCur.getColumnIndex(People.NUMBER));
// show the record
Toast.makeText(this, myname + " " +
mynumber, Toast.LENGTH_SHORT).show();
} while (mqCur.moveToNext()); // repeat loop if more
records exist
}
}
protected void addContact(String newName, String newPhone)
{
// declare ContentValues and ContentUri
ContentValues values = new ContentValues();
Uri phoneUri = null;
// Add contactName to the ContentValues then add
ContentValues to the database
values.put(People.NAME, newName);
Uri contentUri =
getContentResolver().insert(People.CONTENT_URI,values);
/** Add a phone number for the Contact. Begin with the URI
for
the new record just returned by insert(); it ends
with the _ID
of the new record, so we don't have to add the ID
ourselves.
Then append the designation for the phone table to
this URI,
and use the resulting URI to insert the phone number.
*/
phoneUri =
Uri.withAppendedPath(contentUri,People.Phones.CONTENT_DIRECTORY);
// clear ContentValues then Add contactNumber to the
ContentValues
values.clear();
values.put(People.Phones.TYPE, People.TYPE_MOBILE);
values.put(People.Phones.NUMBER, newPhone);
// add content values to the database
getContentResolver().insert(phoneUri, values);
// display success and contact
Toast.makeText(this, "Success! Added Record: " + newName + "
" + newPhone, Toast.LENGTH_SHORT).show();
}
protected void updateContact(String contactName, String newPhone)
{
// Declare columns to return
String[] cols = new String[] {People._ID,
People.NAME,People.NUMBER};
// create an sql string then run sql query
String sqlQuery = "Name = '" + contactName + "'";
Cursor mqCur
= managedQuery(People.CONTENT_URI,cols,sqlQuery,null,null);
// move to first record if database isn't empty
if (mqCur.moveToFirst())
{
// declare ContentValues and ContentUri
ContentValues values = new ContentValues();
// Declare values to hold field values
int myID = 0;
do
{
// get field values
myID
= Integer.parseInt(mqCur.getString(mqCur.getColumnIndex(People._ID)));
// create a phoneUri which contains the
proper _ID for the record we wish to change
Uri myPerson =
ContentUris.withAppendedId(People.CONTENT_URI, myID);
// clear ContentValues then Add contactNumber
to the ContentValues
values.clear();
values.put(People.Phones.TYPE,
People.TYPE_MOBILE);
values.put(People.Phones.NUMBER, newPhone);
// update the record
getContentResolver().update(myPerson, values,
null, null);
// show the record
Toast.makeText(this, "Updated Record: " +
myID, Toast.LENGTH_SHORT).show();
Toast.makeText(this, contactName + " " +
newPhone, Toast.LENGTH_SHORT).show();
} while (mqCur.moveToNext()); // repeat loop if more
records exist
}
else
{
// no records found
Toast.makeText(this, "No records
found",Toast.LENGTH_SHORT).show();
}
}
protected void deleteContact(String contactName)
{
// TODO Auto-generated method stub
}
}
</code>
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en