User Tools

Site Tools


android_learning:headfirst_android_development_notes:chapter_12

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
android_learning:headfirst_android_development_notes:chapter_12 [2016/04/24 03:01] mithatandroid_learning:headfirst_android_development_notes:chapter_12 [2016/04/24 04:06] – [Chapter 12] mithat
Line 1: Line 1:
 ====== Chapter 12 ====== ====== Chapter 12 ======
  
-<WRAP center round info 60%> +This is just some text to get the section below to clear the Table of Contents. Otherwise the whole code block would appear very narrow. 
-Under development+ 
-</WRAP>+Kludgey for sure, but it gets the job done \\ 
 + \\  
 + \\  
 + \\  
 + \\ 
  
 ===== p. 493: Code block ===== ===== p. 493: Code block =====
Line 34: Line 38:
         try {         try {
             // Gain access to our app's database:             // Gain access to our app's database:
-            SQLiteOpenHelper starbuzzDatabaseHelper = new StarbuzzDatabaseHelper(this);+            SQLiteOpenHelper starbuzzDatabaseHelper = 
 +                new StarbuzzDatabaseHelper(this);
             SQLiteDatabase db = starbuzzDatabaseHelper.getReadableDatabase();             SQLiteDatabase db = starbuzzDatabaseHelper.getReadableDatabase();
  
Line 69: Line 74:
             db.close();             db.close();
         } catch (SQLiteException e) {         } catch (SQLiteException e) {
-            Toast toast = Toast.makeText(this, "Database unavailable", Toast.LENGTH_SHORT);+            Toast toast = Toast.makeText(this, "Database unavailable",  
 +                Toast.LENGTH_SHORT);
             toast.show();             toast.show();
         }         }
Line 106: Line 112:
     protected void onCreate(Bundle savedInstanceState) {     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);         super.onCreate(savedInstanceState);
-        ListView listDrinks = getListView(); // i.e., this.getListView(); get the ListView used by this ListActivity+        ListView listDrinks = getListView(); // i.e., this.getListView();  
 +                                             // get the ListView used by  
 +                                             // this ListActivity
  
         // Use a cursor via an adapter to populate listDrinks         // Use a cursor via an adapter to populate listDrinks
         try {         try {
             // Gain access to our app's database:             // Gain access to our app's database:
-            SQLiteOpenHelper starbuzzDatabaseHelper = new StarbuzzDatabaseHelper(this);+            SQLiteOpenHelper starbuzzDatabaseHelper =  
 +                new StarbuzzDatabaseHelper(this);
             db = starbuzzDatabaseHelper.getReadableDatabase();             db = starbuzzDatabaseHelper.getReadableDatabase();
  
Line 130: Line 139:
             listDrinks.setAdapter(listAdapter);             listDrinks.setAdapter(listAdapter);
         } catch (SQLiteException e) {         } catch (SQLiteException e) {
-            Toast.makeText(this, "Database unavailable", Toast.LENGTH_SHORT).show();+            Toast.makeText(this, "Database unavailable",  
 +                Toast.LENGTH_SHORT).show();
         }         }
     }     }
Line 145: Line 155:
     protected void onListItemClick(ListView l, View v, int position, long id) {     protected void onListItemClick(ListView l, View v, int position, long id) {
         super.onListItemClick(l, v, position, id);         super.onListItemClick(l, v, position, id);
-        Intent intent = new Intent(DrinkCategoryActivity.this, DrinkActivity.class);+        Intent intent = new Intent(DrinkCategoryActivity.this,  
 +            DrinkActivity.class);
         intent.putExtra(DrinkActivity.EXTRA_DRINKNO, (int) id);         intent.putExtra(DrinkActivity.EXTRA_DRINKNO, (int) id);
         startActivity(intent);         startActivity(intent);
Line 185: Line 196:
         try {         try {
             // Gain access to our app's database:             // Gain access to our app's database:
-            SQLiteOpenHelper starbuzzDatabaseHelper = new StarbuzzDatabaseHelper(this);+            SQLiteOpenHelper starbuzzDatabaseHelper =  
 +                new StarbuzzDatabaseHelper(this);
             SQLiteDatabase db = starbuzzDatabaseHelper.getWritableDatabase();             SQLiteDatabase db = starbuzzDatabaseHelper.getWritableDatabase();
  
             // Get the name, description, and image for drinkNo:             // Get the name, description, and image for drinkNo:
             Cursor cursor = db.query ("DRINK",             Cursor cursor = db.query ("DRINK",
-                    new String[] {"NAME", "DESCRIPTION", "IMAGE_RESOURCE_ID", "FAVORITE"},+                    new String[] { 
 +                        "NAME",  
 +                        "DESCRIPTION", 
 +                        "IMAGE_RESOURCE_ID",  
 +                        "FAVORITE" 
 +                    },
                     "_id = ?",                     "_id = ?",
                     new String[] {Integer.toString(drinkNo)},                     new String[] {Integer.toString(drinkNo)},
Line 225: Line 242:
             db.close();             db.close();
         } catch (SQLiteException e) {         } catch (SQLiteException e) {
-            Toast toast = Toast.makeText(this, "Database unavailable", Toast.LENGTH_SHORT);+            Toast toast = Toast.makeText(this, "Database unavailable", 
 +                Toast.LENGTH_SHORT);
             toast.show();             toast.show();
         }         }
Line 239: Line 257:
         drinkValues.put("FAVORITE", favorite.isChecked());         drinkValues.put("FAVORITE", favorite.isChecked());
  
-        SQLiteOpenHelper starbuzzDatabaseHelper = new StarbuzzDatabaseHelper(DrinkActivity.this);+        SQLiteOpenHelper starbuzzDatabaseHelper =  
 +            new StarbuzzDatabaseHelper(DrinkActivity.this);
  
         try {         try {
             SQLiteDatabase db = starbuzzDatabaseHelper.getWritableDatabase();             SQLiteDatabase db = starbuzzDatabaseHelper.getWritableDatabase();
-            db.update("DRINK", drinkValues, "_id = ?", new String[] {Integer.toString(drinkNo)});+            db.update("DRINK", drinkValues, "_id = ?", 
 +                new String[] {Integer.toString(drinkNo)});
             db.close();             db.close();
         } catch(SQLiteException e) {         } catch(SQLiteException e) {
-            Toast.makeText(DrinkActivity.this, "Database unavailable", Toast.LENGTH_SHORT).show();+            Toast.makeText(DrinkActivity.this, "Database unavailable", 
 +                Toast.LENGTH_SHORT).show();
         }         }
     }     }
Line 281: Line 302:
         setContentView(R.layout.activity_top_level);         setContentView(R.layout.activity_top_level);
  
-        AdapterView.OnItemClickListener itemClickListener = new AdapterView.OnItemClickListener() {+        AdapterView.OnItemClickListener itemClickListener = 
 +            new AdapterView.OnItemClickListener() { 
             @Override             @Override
-            public void onItemClick(AdapterView<?> parent, View view, int position, long id) { +            public void onItemClick (AdapterView<?> parent, View view, 
-                if (position == 0) { +                int position, long id) { 
-                    Intent intent = new Intent(TopLevelActivity.this, DrinkCategoryActivity.class); +                    if (position == 0) { 
-                    startActivity(intent); +                        Intent intent = new Intent(TopLevelActivity.this,  
-                }+                            DrinkCategoryActivity.class); 
 +                        startActivity(intent); 
 +                    }
             }             }
         };         };
Line 298: Line 323:
         ListView listFavrotites = (ListView)findViewById(R.id.list_favorites);         ListView listFavrotites = (ListView)findViewById(R.id.list_favorites);
         try {         try {
-            SQLiteOpenHelper starbuzzDatabaseHelper = new StarbuzzDatabaseHelper(this);+            SQLiteOpenHelper starbuzzDatabaseHelper =  
 +                new StarbuzzDatabaseHelper(this);
             db = starbuzzDatabaseHelper.getReadableDatabase();             db = starbuzzDatabaseHelper.getReadableDatabase();
  
Line 308: Line 334:
  
             // Map data to list via adapter             // Map data to list via adapter
-            CursorAdapter favoriteAdapter = new SimpleCursorAdapter(TopLevelActivity.this,+            CursorAdapter favoriteAdapter = new SimpleCursorAdapter( 
 +                    TopLevelActivity.this,
                     android.R.layout.simple_list_item_1,                     android.R.layout.simple_list_item_1,
                     favoritesCursor,                     favoritesCursor,
Line 317: Line 344:
  
             // Handle click events on list items - show favorite item's activity             // Handle click events on list items - show favorite item's activity
-            listFavrotites.setOnItemClickListener(new AdapterView.OnItemClickListener() {+            listFavrotites.setOnItemClickListener( 
 +                new AdapterView.OnItemClickListener() {
                 @Override                 @Override
-                public void onItemClick(AdapterView<?> parent, View view, int position, long id) { +                public void onItemClick( 
-                    Intent intent = new Intent(TopLevelActivity.this, DrinkActivity.class); +                    AdapterView<?> parent, View view, int position, long id) { 
-                    intent.putExtra(DrinkActivity.EXTRA_DRINKNO, (int)id); +                        Intent intent =  
-                    startActivity(intent);+                            new Intent(TopLevelActivity.this, DrinkActivity.class); 
 +                        intent.putExtra(DrinkActivity.EXTRA_DRINKNO, (int)id); 
 +                        startActivity(intent); 
 +                    }
                 }                 }
-            });+            );
  
  
         } catch(SQLiteException e) {         } catch(SQLiteException e) {
-            Toast.makeText(TopLevelActivity.this, "Database unavailable", Toast.LENGTH_SHORT).show();+            Toast.makeText(TopLevelActivity.this, "Database unavailable", 
 +                Toast.LENGTH_SHORT).show();
         }         }
     }     }
Line 347: Line 379:
         super.onRestart();         super.onRestart();
         try{         try{
-            StarbuzzDatabaseHelper starbuzzDatabaseHelper = new StarbuzzDatabaseHelper(this);+            StarbuzzDatabaseHelper starbuzzDatabaseHelper = 
 +                new StarbuzzDatabaseHelper(this);
             db = starbuzzDatabaseHelper.getReadableDatabase();             db = starbuzzDatabaseHelper.getReadableDatabase();
  
Line 363: Line 396:
             favoritesCursor = newCursor;             favoritesCursor = newCursor;
         } catch(SQLiteException e) {         } catch(SQLiteException e) {
-            Toast toast = Toast.makeText(this, "Database unavailable", Toast.LENGTH_SHORT);+            Toast toast = Toast.makeText(this, "Database unavailable", 
 +                Toast.LENGTH_SHORT);
             toast.show();             toast.show();
         }         }
Line 418: Line 452:
         try {         try {
             // Gain access to our app's database:             // Gain access to our app's database:
-            SQLiteOpenHelper starbuzzDatabaseHelper = new StarbuzzDatabaseHelper(this);+            SQLiteOpenHelper starbuzzDatabaseHelper = 
 +                new StarbuzzDatabaseHelper(this);
             SQLiteDatabase db = starbuzzDatabaseHelper.getWritableDatabase();             SQLiteDatabase db = starbuzzDatabaseHelper.getWritableDatabase();
  
             // Get the name, description, and image for drinkNo:             // Get the name, description, and image for drinkNo:
             Cursor cursor = db.query ("DRINK",             Cursor cursor = db.query ("DRINK",
-                    new String[] {"NAME", "DESCRIPTION", "IMAGE_RESOURCE_ID", "FAVORITE"},+                    new String[] 
 +                        {"NAME", "DESCRIPTION", "IMAGE_RESOURCE_ID", "FAVORITE"},
                     "_id = ?",                     "_id = ?",
                     new String[] {Integer.toString(drinkNo)},                     new String[] {Integer.toString(drinkNo)},
Line 458: Line 494:
             db.close();             db.close();
         } catch (SQLiteException e) {         } catch (SQLiteException e) {
-            Toast toast = Toast.makeText(this, "Database unavailable", Toast.LENGTH_SHORT);+            Toast toast = Toast.makeText(this, "Database unavailable", 
 +                Toast.LENGTH_SHORT);
             toast.show();             toast.show();
         }         }
Line 479: Line 516:
             drinkValues = new ContentValues();             drinkValues = new ContentValues();
             drinkValues.put("FAVORITE", favorite.isChecked());             drinkValues.put("FAVORITE", favorite.isChecked());
-            Toast.makeText(DrinkActivity.this, "Backgrounding DB operation...", Toast.LENGTH_SHORT).show();+            Toast.makeText(DrinkActivity.this, "Backgrounding DB operation...",  
 +                Toast.LENGTH_SHORT).show();
         }         }
  
Line 485: Line 523:
         protected Boolean doInBackground(Integer... drinks) {         protected Boolean doInBackground(Integer... drinks) {
             int drinkNo = drinks[0];             int drinkNo = drinks[0];
-            SQLiteOpenHelper starbuzzDatabaseHelper = new StarbuzzDatabaseHelper(DrinkActivity.this);+            SQLiteOpenHelper starbuzzDatabaseHelper =  
 +                new StarbuzzDatabaseHelper(DrinkActivity.this);
             try {             try {
                 SQLiteDatabase db = starbuzzDatabaseHelper.getWritableDatabase();                 SQLiteDatabase db = starbuzzDatabaseHelper.getWritableDatabase();
-                db.update("DRINK", drinkValues, "_id = ?", new String[]{Integer.toString(drinkNo)});+                db.update("DRINK", drinkValues, "_id = ?", 
 +                    new String[]{Integer.toString(drinkNo)});
                 db.close();                 db.close();
                 return true;                 return true;
Line 499: Line 539:
         protected void onPostExecute(Boolean success) {         protected void onPostExecute(Boolean success) {
             if (!success) {             if (!success) {
-                Toast.makeText(DrinkActivity.this, "Database unavailable", Toast.LENGTH_SHORT).show();+                Toast.makeText(DrinkActivity.this, "Database unavailable",  
 +                    Toast.LENGTH_SHORT).show();
             } else {             } else {
-                Toast.makeText(DrinkActivity.this, "DB update complete", Toast.LENGTH_SHORT).show();+                Toast.makeText(DrinkActivity.this, "DB update complete", 
 +                    Toast.LENGTH_SHORT).show();
             }             }
         }         }
Line 509: Line 551:
 </file> </file>
  
 +===== Debug with the system log =====
 +This isn't covered until Chapter 13 in the book, but it's worth using here.
 +
 +In this final version of DrinkActivity, I use the [[android_learning:using_the_system_log|system log]] to output debug information to the console instead of using Toasts for debug messages.
 +
 +<file java DrinkActivity.java>
 +package com.hfad.starbuzz;
 +
 +import android.content.ContentValues;
 +import android.database.Cursor;
 +import android.database.sqlite.SQLiteDatabase;
 +import android.database.sqlite.SQLiteException;
 +import android.database.sqlite.SQLiteOpenHelper;
 +import android.os.AsyncTask;
 +import android.support.v7.app.AppCompatActivity;
 +import android.os.Bundle;
 +import android.util.Log;
 +import android.view.View;
 +import android.widget.CheckBox;
 +import android.widget.ImageView;
 +import android.widget.TextView;
 +import android.widget.Toast;
 +
 +public class DrinkActivity extends AppCompatActivity {
 +
 +    public static final String EXTRA_DRINKNO = "drinkNo";
 +
 +    @Override
 +    protected void onCreate(Bundle savedInstanceState) {
 +        super.onCreate(savedInstanceState);
 +        setContentView(R.layout.activity_drink);
 +
 +        int drinkNo = (Integer)getIntent().getExtras().get(EXTRA_DRINKNO);
 +
 +        //Create a cursor and populate Views from the cursor's data.
 +        try {
 +            // Gain access to our app's database:
 +            SQLiteOpenHelper starbuzzDatabaseHelper = 
 +                new StarbuzzDatabaseHelper(this);
 +            SQLiteDatabase db = starbuzzDatabaseHelper.getWritableDatabase();
 +
 +            // Get the name, description, and image for drinkNo:
 +            Cursor cursor = db.query ("DRINK",
 +                    new String[]
 +                        {"NAME", "DESCRIPTION", "IMAGE_RESOURCE_ID", "FAVORITE"},
 +                    "_id = ?",
 +                    new String[] {Integer.toString(drinkNo)},
 +                    null, null,null);
 +
 +            // Move to the first record in the Cursor
 +            if (cursor.moveToFirst()) {
 +                // Get the drink details from the cursor
 +                String nameText = cursor.getString(0);
 +                String descriptionText = cursor.getString(1);
 +                int photoId = cursor.getInt(2);
 +                boolean isFavorite = (cursor.getInt(3) == 1);
 +
 +                // Populate the drink name
 +                TextView name = (TextView)findViewById(R.id.name);
 +                name.setText(nameText);
 +
 +                // Populate the drink description
 +                TextView description = (TextView)findViewById(R.id.description);
 +                description.setText(descriptionText);
 +
 +                // Populate the drink image
 +                ImageView photo = (ImageView)findViewById(R.id.photo);
 +                photo.setImageResource(photoId);
 +                photo.setContentDescription(nameText);
 +
 +                // Populate the favorite checkbox
 +                CheckBox favorite = (CheckBox)findViewById(R.id.favorite);
 +                favorite.setChecked(isFavorite);
 +            }
 +
 +            // Close up shop.
 +            cursor.close();
 +            db.close();
 +        } catch (SQLiteException e) {
 +            Toast toast = Toast.makeText(this, "Database unavailable",
 +                Toast.LENGTH_SHORT);
 +            toast.show();
 +        }
 +    }
 +
 +    // Update the DB's FAVORITES field for this drink.
 +    public void onFavoriteClicked(View view) {
 +        int drinkNo = (Integer)getIntent().getExtras().get("drinkNo");
 +        new UpdateDrinkTask().execute(drinkNo);
 +    }
 +
 +    // Inner class: a task to update the drink's DB record.
 +    private class UpdateDrinkTask extends AsyncTask <Integer, Void, Boolean> {
 +
 +        ContentValues drinkValues;
 +
 +        @Override
 +        protected void onPreExecute() {
 +            CheckBox favorite = (CheckBox)findViewById(R.id.favorite);
 +            drinkValues = new ContentValues();
 +            drinkValues.put("FAVORITE", favorite.isChecked());
 +            Log.d("DB", "Backgrounding DB operation...");
 +        }
 +
 +        @Override
 +        protected Boolean doInBackground(Integer... drinks) {
 +            int drinkNo = drinks[0];
 +            SQLiteOpenHelper starbuzzDatabaseHelper =
 +                new StarbuzzDatabaseHelper(DrinkActivity.this);
 +            try {
 +                SQLiteDatabase db = starbuzzDatabaseHelper.getWritableDatabase();
 +                db.update("DRINK", drinkValues, "_id = ?",
 +                    new String[]{Integer.toString(drinkNo)});
 +                db.close();
 +                return true;
 +            } catch(SQLiteException e) {
 +                return false;
 +            }
 +        }
 +
 +        @Override
 +        protected void onPostExecute(Boolean success) {
 +            if (!success) {
 +                Toast.makeText(DrinkActivity.this, "Database unavailable",
 +                    Toast.LENGTH_SHORT).show();
 +            } else {
 +                Log.d("DB", "DB update complete");
 +            }
 +        }
 +    }
 +}
 +
 +</file>
android_learning/headfirst_android_development_notes/chapter_12.txt · Last modified: 2016/04/24 04:08 by mithat

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki