0

I basically used this tutorial on how to make a SQLite database, which is fine. I now have a new class named camera, where I want to get all the (or a single) phone numbers that are in the database, but I have no idea how to call for the database in the new class.

I tried to look at other examples, but they use a DatabaseHelper instead of the Handler here, and the code is constructed in a bit of a different way, which got me confused.

My Question is: how do I call for my database in the new camera class and get all the information back I need (phone numbers)? I don't know if this is important, but I want to open the database at a OnClickView event

DatabaseHandler.java

public class DatabaseHandler extends SQLiteOpenHelper {

    // All Static variables
    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "contactsManager";

    // Contacts table name
    private static final String TABLE_CONTACTS = "contacts";

    // Contacts Table Columns names
    private static final String KEY_ID = "id";
    private static final String KEY_NAME = "name";
    private static final String KEY_PH_NO = "phone_number";

    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
                + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
                + KEY_PH_NO + " TEXT" + ")";
        db.execSQL(CREATE_CONTACTS_TABLE);
    }

    // Upgrading database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);

        // Create tables again
        onCreate(db);
    }

    /**
     * All CRUD(Create, Read, Update, Delete) Operations
     */

    // Adding new contact
    void addContact(Contact contact) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, contact.getName()); // Contact Name
        values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone

        // Inserting Row
        db.insert(TABLE_CONTACTS, null, values);
        db.close(); // Closing database connection
    }

    // Getting single contact
    Contact getContact(int id) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
                KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",
                new String[] { String.valueOf(id) }, null, null, null, null);
        if (cursor != null)
            cursor.moveToFirst();

        Contact contact = new Contact(Integer.parseInt(cursor.getString(0)),
                cursor.getString(1), cursor.getString(2));
        // return contact
        return contact;
    }

    // Getting All Contacts
    public List<Contact> getAllContacts() {
        List<Contact> contactList = new ArrayList<Contact>();
        // Select All Query
        String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                Contact contact = new Contact();
                contact.setID(Integer.parseInt(cursor.getString(0)));
                contact.setName(cursor.getString(1));
                contact.setPhoneNumber(cursor.getString(2));
                // Adding contact to list
                contactList.add(contact);
            } while (cursor.moveToNext());
        }

        // return contact list
        return contactList;
    }

    // Updating single contact
    public int updateContact(Contact contact) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, contact.getName());
        values.put(KEY_PH_NO, contact.getPhoneNumber());

        // updating row
        return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
                new String[] { String.valueOf(contact.getID()) });
    }

    // Deleting single contact
    public void deleteContact(Contact contact) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
                new String[] { String.valueOf(contact.getID()) });
        db.close();
    }


    // Getting contacts Count
    public int getContactsCount() {
        String countQuery = "SELECT  * FROM " + TABLE_CONTACTS;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        cursor.close();

        // return count
        return cursor.getCount();
    }

The camera class where I want to call for the database in the OnClickView

  public camera extends Activity {
        protected Dialog mSplashDialog;
        private Button foto;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
                populateBtn();
    }

private void populateBtn() {
        foto1 = (Button) this.findViewById(R.id.button2);
        foto1.setOnClickListener(new View.OnClickListener() {
            @SuppressLint("SimpleDateFormat")
            @Override
            public void onClick(View v) 
// here is where i want to call for the database (to get a single, or all the phone numbers)
}

The contact class

Contact.java
package com.androidhive.androidsqlite; 

public class Contact {

    //private variables
    int _id;
    String _name;
    String _phone_number;

    // Empty constructor
    public Contact(){

    }
    // constructor
    public Contact(int id, String name, String _phone_number){
        this._id = id;
        this._name = name;
        this._phone_number = _phone_number;
    }

    // constructor
    public Contact(String name, String _phone_number){
        this._name = name;
        this._phone_number = _phone_number;
    }
    // getting ID
    public int getID(){
        return this._id;
    }

    // setting id
    public void setID(int id){
        this._id = id;
    }

    // getting name
    public String getName(){
        return this._name;
    }

    // setting name
    public void setName(String name){
        this._name = name;
    }

    // getting phone number
    public String getPhoneNumber(){
        return this._phone_number;
    }

    // setting phone number
    public void setPhoneNumber(String phone_number){
        this._phone_number = phone_number;
    }
}

3 Answers 3

1

from your camera class:

DatabaseHandler myDatabase = new DatabaseHandler(this);
List<Contact> allContacts = myDatabase.getAllContacts();
// do something with your contacts...

Hope this helps. Just to point that the DatabaseHandler expects a Context in the constructor, so, as long as your class camera extends from Activity, it should work.

Sign up to request clarification or add additional context in comments.

3 Comments

I get an error at the DatabaseHandler myDatabase = new DatabaseHandler(this); I guess this is because I want to summon it at a OnClickView event? I have no idea how to solve this, because when I change the databasebasehandler to a OnClickListener instead of a context, it gives even more errors.
In this case, use camera.this instead of this
try new DatabaseHandler(camera.this), because your OnClickListener is an internal class, so this refers to that listener.
0

Just create a instance of your DatabaseHandler class and use its methods.

For get all contacts:

DatabaseHandler db = new DatabaseHandler(this);
List<Contact> contacts = db.getAllContacts();
for (Contact contact : contacts) {
    // use your contact methods...
}

For one contact:

DatabaseHandler db = new DatabaseHandler(this);
Contact contact = db.getContact(your_id);
// use your contact methods...

Use this only if you're in an Activity class. You'll need a valid context otherwise.

Update:

The OnClickListener is an internal class. You'll need to use its external class as a valid context. Use:

private void populateBtn() {
    foto1 = (Button) this.findViewById(R.id.button2);
    foto1.setOnClickListener(new View.OnClickListener() {
        @SuppressLint("SimpleDateFormat")
        @Override
        public void onClick(View v) 
            DatabaseHandler db = new DatabaseHandler(camera.this);
            List<Contact> contacts = db.getAllContacts();
            for (Contact contact : contacts) {
                // use your contact methods...
             }
        }
     }
 }

1 Comment

thank you a lot! I forgot to do the camera.this, so I kept getting errors
0
// Reading all contacts
    Log.d("Reading: ", "Reading all contacts..");
    List<CompanysContact> contacts = db.getAllContacts();       

    for (CompanysContact cn : contacts) {
        String log = "Id: "+cn.getID()+" ,Name: " + cn.getName()
                     + " ,Phone: " + cn.getPhoneNumber() ;
            // Writing Contacts to log
    Log.d("Name: ", log);

    }

1 Comment

please give description also

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.