• After 15+ years, we've made a big change: Android Forums is now Early Bird Club. Learn more here.

Notepad3 Tutorial Adding a ratingbar

StefanKos

Lurker
Dec 3, 2011
1
0
I've completed the Notepad Tutorials from the Devs website and now I'm trying to figure it out how to add new things.This time I"m looking to define a rating bar that will be present in the edit/add notes section and will allow the user to rate the note/s.I've tried to define it in the code but the program will crash,you will see the attempt when I present the code.I have been unable to find any examples on the net, of how to take the RatingBar and add it as a value to theSQLite database.So obviously my question is how can I write the code for the rating bar's implementation?Thank you.

Notepad3 class:



Code:
 package com.android.demo.notepad3;
    
    import android.app.ListActivity;
    import android.content.Intent;
    import android.database.Cursor;
    import android.os.Bundle;
    import android.view.ContextMenu;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ContextMenu.ContextMenuInfo;
    import android.widget.ListView;
    
    import android.widget.SimpleCursorAdapter;
    import android.widget.AdapterView.AdapterContextMenuInfo;
    
    
    public class Notepadv3 extends ListActivity {
        private static final int ACTIVITY_CREATE=0;
        private static final int ACTIVITY_EDIT=1;
    
        private static final int INSERT_ID = Menu.FIRST;
        private static final int DELETE_ID = Menu.FIRST + 1;
    
        private NotesDbAdapter mDbHelper;
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.notes_list);
            mDbHelper = new NotesDbAdapter(this);
            mDbHelper.open();
            fillData();
            registerForContextMenu(getListView());
           
        }
    
        private void fillData() {
            Cursor notesCursor = mDbHelper.fetchAllNotes();
            startManagingCursor(notesCursor);
    
            // Create an array to specify the fields we want to display in the list (only TITLE)
            String[] from = new String[]{NotesDbAdapter.KEY_TITLE,NotesDbAdapter.KEY_BODY,NotesDbAdapter.KEY_RATING};
    
            // and an array of the fields we want to bind those fields to (in this case just text1)
            int[] to = new int[]{R.id.text1,R.id.text2,R.id.ratingbar};
    
            // Now create a simple cursor adapter and set it to display
            SimpleCursorAdapter notes = 
                new SimpleCursorAdapter(this, R.layout.notes_row, notesCursor, from, to);
            setListAdapter(notes);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            super.onCreateOptionsMenu(menu);
            menu.add(0, INSERT_ID, 0, R.string.menu_insert);
            return true;
        }
    
        @Override
        public boolean onMenuItemSelected(int featureId, MenuItem item) {
            switch(item.getItemId()) {
                case INSERT_ID:
                    createNote();
                    return true;
            }
    
            return super.onMenuItemSelected(featureId, item);
        }
    
        @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                ContextMenuInfo menuInfo) {
            super.onCreateContextMenu(menu, v, menuInfo);
            menu.add(0, DELETE_ID, 0, R.string.menu_delete);
        }
    
        @Override
        public boolean onContextItemSelected(MenuItem item) {
            switch(item.getItemId()) {
                case DELETE_ID:
                    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
                    mDbHelper.deleteNote(info.id);
                    fillData();
                    return true;
            }
            return super.onContextItemSelected(item);
        }
    
        private void createNote() {
            Intent i = new Intent(this, NoteEdit.class);
            startActivityForResult(i, ACTIVITY_CREATE);
        }
    
        @Override
        protected void onListItemClick(ListView l, View v, int position, long id) {
            super.onListItemClick(l, v, position, id);
            Intent i = new Intent(this, NoteEdit.class);
            i.putExtra(NotesDbAdapter.KEY_ROWID, id);
            startActivityForResult(i, ACTIVITY_EDIT);
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
            super.onActivityResult(requestCode, resultCode, intent);
            fillData();
        }
    }
NoteEdit class:

Code:
package com.android.demo.notepad3;
    
    import android.app.Activity;
    import android.database.Cursor;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.RatingBar;
    
    public class NoteEdit extends Activity {
    
        private EditText mTitleText;
        private EditText mBodyText;
        private Long mRowId;
        private NotesDbAdapter mDbHelper;
        private RatingBar mRatingBar;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mDbHelper = new NotesDbAdapter(this);
            mDbHelper.open();
    
            setContentView(R.layout.note_edit);
            setTitle(R.string.edit_note);
    
            mTitleText = (EditText) findViewById(R.id.title);
            mBodyText = (EditText) findViewById(R.id.body);
            mRatingBar= (RatingBar) findViewById(R.id.ratingbar);
    
            Button confirmButton = (Button) findViewById(R.id.confirm);
    
            mRowId = (savedInstanceState == null) ? null :
                (Long) savedInstanceState.getSerializable(NotesDbAdapter.KEY_ROWID);
            if (mRowId == null) {
                Bundle extras = getIntent().getExtras();
                mRowId = extras != null ? extras.getLong(NotesDbAdapter.KEY_ROWID)
                                        : null;
            }
    
            populateFields();
    
            confirmButton.setOnClickListener(new View.OnClickListener() {
    
                public void onClick(View view) {
                    setResult(RESULT_OK);
                    finish();
                }
    
            });
        }
    
        private void populateFields() {
            if (mRowId != null) {
                Cursor note = mDbHelper.fetchNote(mRowId);
                startManagingCursor(note);
                mTitleText.setText(note.getString(
                        note.getColumnIndexOrThrow(NotesDbAdapter.KEY_TITLE)));
                mBodyText.setText(note.getString(
                        note.getColumnIndexOrThrow(NotesDbAdapter.KEY_BODY)));
                mRatingBar.setRating(note.getFloat(
                        note.getColumnIndexOrThrow(NotesDbAdapter.KEY_RATING)));
                
            }
        }
    
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            saveState();
            outState.putSerializable(NotesDbAdapter.KEY_ROWID, mRowId);
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            saveState();
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            populateFields();
        }
    
        private void saveState() {
            String title = mTitleText.getText().toString();
            String body = mBodyText.getText().toString();
            Float rating = mRatingBar.getRating();
    
            if (mRowId == null) {
                long id = mDbHelper.createNote(title, body,rating);
                if (id > 0) {
                    mRowId = id;
                }
            } else {
                mDbHelper.updateNote(mRowId, title, body,rating);
            }
        }
    
    }
NotesDBAdabpter class:

Code:
package com.android.demo.notepad3;
    
    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.SQLiteOpenHelper;
    import android.util.Log;
    
   
    public class NotesDbAdapter {
    
        public static final String KEY_TITLE = "title";
        public static final String KEY_BODY = "body";
        public static final String KEY_RATING = "rating";
        public static final String KEY_ROWID = "_id";
    
        private static final String TAG = "NotesDbAdapter";
        private DatabaseHelper mDbHelper;
        private SQLiteDatabase mDb;
    
        /**
         * Database creation sql statement
         */
        private static final String DATABASE_CREATE =
            "create table notes (_id integer primary key autoincrement, "
            + "title text not null, body text not null,rating not null);";
    
        private static final String DATABASE_NAME = "data";
        private static final String DATABASE_TABLE = "notes";
        private static final int DATABASE_VERSION = 5;
    
        private final Context mCtx;
        
    
        private static class DatabaseHelper extends SQLiteOpenHelper {
    
            DatabaseHelper(Context context) {
                super(context, DATABASE_NAME, null, DATABASE_VERSION);
            }
    
            @Override
            public void onCreate(SQLiteDatabase db) {
    
                db.execSQL(DATABASE_CREATE);
                insertNotes(db);
            }
    
            @Override
            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                        + newVersion + ", which will destroy all old data");
                db.execSQL("DROP TABLE IF EXISTS notes");
               
                onCreate(db);
            }
        }
    
        /**
         * Constructor - takes the context to allow the database to be
         * opened/created
         * 
         * @param ctx the Context within which to work
         */
        public NotesDbAdapter(Context ctx) {
            this.mCtx = ctx;
        }
    
        /**
         * Open the notes database. If it cannot be opened, try to create a new
         * instance of the database. If it cannot be created, throw an exception to
         * signal the failure
         * 
         * @return this (self reference, allowing this to be chained in an
         *         initialization call)
         * @throws SQLException if the database could be neither opened or created
         */
        public NotesDbAdapter open() throws SQLException {
            mDbHelper = new DatabaseHelper(mCtx);
            mDb = mDbHelper.getWritableDatabase();
            return this;
        }
    
        public void close() {
            mDbHelper.close();
        }
    
    
        /**
         * Create a new note using the title and body provided. If the note is
         * successfully created return the new rowId for that note, otherwise return
         * a -1 to indicate failure.
         * 
         * @param title the title of the note
         * @param body the body of the note
         * @return rowId or -1 if failed
         */
        public long createNote(String title, String body,Float rating) {
            ContentValues initialValues = new ContentValues();
            initialValues.put(KEY_TITLE, title);
            initialValues.put(KEY_BODY, body);
            initialValues.put(KEY_RATING, rating);
            
    
            return mDb.insert(DATABASE_TABLE, null, initialValues);
        }
    
        /**
         * Delete the note with the given rowId
         * 
         * @param rowId id of note to delete
         * @return true if deleted, false otherwise
         */
        public boolean deleteNote(long rowId) {
    
            return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
        }
    
        /**
         * Return a Cursor over the list of all notes in the database
         * 
         * @return Cursor over all notes
         */
        public Cursor fetchAllNotes() {
    
            return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE,
                    KEY_BODY,KEY_RATING}, null, null, null, null, null);
        }
    
        /**
         * Return a Cursor positioned at the note that matches the given rowId
         * 
         * @param rowId id of note to retrieve
         * @return Cursor positioned to matching note, if found
         * @throws SQLException if note could not be found/retrieved
         */
        public Cursor fetchNote(long rowId) throws SQLException {
    
            Cursor mCursor =
    
                mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
                        KEY_TITLE, KEY_BODY,KEY_RATING}, KEY_ROWID + "=" + rowId, null,
                        null, null, null, null);
            if (mCursor != null) {
                mCursor.moveToFirst();
            }
            return mCursor;
    
        }
    
        /**
         * Update the note using the details provided. The note to be updated is
         * specified using the rowId, and it is altered to use the title and body
         * values passed in
         * 
         * @param rowId id of note to update
         * @param title value to set note title to
         * @param body value to set note body to
         * @return true if the note was successfully updated, false otherwise
         */
        public boolean updateNote(long rowId, String title, String body,Float rating) {
            ContentValues args = new ContentValues();
            args.put(KEY_TITLE, title);
            args.put(KEY_BODY, body);
            args.put(KEY_RATING, rating);
    
            return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
        }
        private static void insertNotes(SQLiteDatabase db){
            
        }
    
    }
 

BEST TECH IN 2023

We've been tracking upcoming products and ranking the best tech since 2007. Thanks for trusting our opinion: we get rewarded through affiliate links that earn us a commission and we invite you to learn more about us.

Smartphones