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

Reply via email to