You are previewing Android™ How to Program, Third Edition.
O'Reilly logo
Android™ How to Program, Third Edition

Book Description

For courses in Android Programming.

Thinking like a developer — from the start.

Created by world-renowned programming instructors Paul and Harvey Deitel, Android How to Program, Third Edition introduces the dynamic world of Android smartphone and tablet app development with the Android Software Development Kit (SDK), the Java™ programming language, and the rapidly evolving Android Studio Integrated Development Environment (IDE). Updated to Android 6 and Google’s preferred Android Studio IDE, the Third Edition presents cutting-edge mobile computing technologies. The Deitels' App-driven Approach helps readers master Android app development through eight complete, working Android apps.

Each chapter features new concepts through a single app. The authors begin with an introduction to the app, followed by an app test-drive showing sample executions and a technologies overview. Next, they present detailed steps to build the app. Finally, they provide a detailed code walkthrough of the app’s source code, discussing the programming concepts and Android APIs used in the app. The book also has an extensive introduction to programming using the Java language, making it appropriate for Java courses that want to add an app-programming flavor.

Table of Contents

  1. About This E-Book
  2. Title Page
  3. Copyright Page
  4. Deitel® Series Page
    1. How To Program Series
    2. Deitel® Developer Series
    3. Simply Series
    4. CourseSmart Web Books
    5. LiveLessons Video Learning Products
  5. Dedication Page
  6. Contents
  7. Preface
    1. Architecture of Android How to Program, 3/e
    2. App-Driven Approach
    3. Intended Audiences
    4. Instructor Resources
    5. Before You Begin: Software Used in Android How to Program, 3/e
    6. Getting up to Speed in Java and XML
    7. App-Development Courses
    8. Key Topics
    9. Pedagogic Features
    10. Working with Open-Source Apps
    11. Copyright Notice and Code License
    12. Android 6 App-Development Fundamentals LiveLessons Video Training
    13. Join the Deitel & Associates, Inc. Social Media Communities
    14. Contacting the Authors
    15. Acknowledgments
    16. About the Authors
    17. About Deitel & Associates, Inc.
  8. Before You Begin
    1. Software and Hardware System Requirements
    2. Installing the Java Development Kit (JDK)
    3. Setting the PATH Environment Variable
    4. JDK Installation Directory and the bin Subdirectory
    5. Setting the CLASSPATH Environment Variable
    6. Installing Android Studio
    7. Configure Android Studio to Show Line Numbers
    8. Configure Android Studio to Disallow Code Folding
    9. Android 6 SDK
    10. Creating Android Virtual Devices (AVDs)
    11. Setting Up an Android Device for Testing Apps
    12. Downloading the Book’s Code Examples
    13. A Note Regarding Android Studio and the Android SDK
  9. 1. Introduction to Android
    1. 1.1 Introduction
      1. App-Driven Approach
    2. 1.2 Android—The World’s Leading Mobile Operating System
    3. 1.3 Android Features
      1. Openness and Open Source
      2. Java
      3. Multitouch Screen
      4. Gestures
      5. Built-in Apps
      6. Web Services
    4. 1.4 Android Operating System
      1. Android Version Naming Convention
      2. 1.4.1 Android 2.2 (Froyo)
      3. 1.4.2 Android 2.3 (Gingerbread)
      4. 1.4.3 Android 3.0 through 3.2 (Honeycomb)
      5. 1.4.4 Android 4.0 through 4.0.4 (Ice Cream Sandwich)
      6. 1.4.5 Android 4.1–4.3 (Jelly Bean)
      7. 1.4.6 Android 4.4 (KitKat)
      8. 1.4.7 Android 5.0 and 5.1 (Lollipop)
      9. 1.4.8 Android 6 (Marshmallow)
    5. 1.5 Downloading Apps from Google Play
    6. 1.6 Packages
    7. 1.7 Android Software Development Kit (SDK)
      1. Android Studio
      2. The Android Emulator
    8. 1.8 Object-Oriented Programming: A Quick Refresher
      1. 1.8.1 The Automobile as an Object
      2. 1.8.2 Methods and Classes
      3. 1.8.3 Instantiation
      4. 1.8.4 Reuse
      5. 1.8.5 Messages and Method Calls
      6. 1.8.6 Attributes and Instance Variables
      7. 1.8.7 Encapsulation
      8. 1.8.8 Inheritance
      9. 1.8.9 Object-Oriented Analysis and Design (OOAD)
    9. 1.9 Test-Driving the Tip Calculator App in an Android Virtual Device (AVD)
      1. 1.9.1 Opening the Tip Calculator App’s Project in Android Studio
      2. 1.9.2 Creating Android Virtual Devices (AVDs)
      3. 1.9.3 Running the Tip Calculator App on the Nexus 6 Smartphone AVD
      4. 1.9.4 Running the Tip Calculator App on an Android Device
    10. 1.10 Building Great Android Apps
    11. 1.11 Android Development Resources
    12. 1.12 Wrap-Up
    13. Self-Review Exercises
    14. Answers to Self-Review Exercises
    15. Exercises
  10. 2. Welcome App
    1. 2.1 Introduction
    2. 2.2 Technologies Overview
      1. 2.2.1 Android Studio
      2. 2.2.2 LinearLayout, TextView and ImageView
      3. 2.2.3 Extensible Markup Language (XML)
      4. 2.2.4 App Resources
      5. 2.2.5 Accessibility
      6. 2.2.6 Internationalization
    3. 2.3 Creating an App
      1. 2.3.1 Launching Android Studio
      2. 2.3.2 Creating a New Project
      3. 2.3.3 Create New Project Dialog
      4. 2.3.4 Target Android Devices Step
      5. 2.3.5 Add an Activity to Mobile Step
      6. 2.3.6 Customize the Activity Step
    4. 2.4 Android Studio Window
      1. 2.4.1 Project Window
      2. 2.4.2 Editor Windows
      3. 2.4.3 Component Tree Window
      4. 2.4.4 App Resource Files
      5. 2.4.5 Layout Editor
      6. 2.4.6 Default GUI
      7. 2.4.7 XML for the Default GUI
    5. 2.5 Building the App’s GUI with the Layout Editor
      1. 2.5.1 Adding an Image to the Project
      2. 2.5.2 Adding an App Icon
      3. 2.5.3 Changing RelativeLayout to a LinearLayout
      4. 2.5.4 Changing the LinearLayout’s id and orientation
      5. 2.5.5 Configuring the TextView’s id and text Properties
      6. 2.5.6 Configuring the TextView’s textSize Property—Scaled Pixels and Density-Independent Pixels
      7. 2.5.7 Setting the TextView’s textColor Property
      8. 2.5.8 Setting the TextView’s gravity Property
      9. 2.5.9 Setting the TextView’s layout:gravity Property
      10. 2.5.10 Setting the TextView’s layout:weight Property
      11. 2.5.11 Adding an ImageView to Display the Image
      12. 2.5.12 Previewing the Design
    6. 2.6 Running the Welcome App
    7. 2.7 Making Your App Accessible
      1. Enabling TalkBack for the ImageViews
      2. Testing the App with TalkBack Enabled
      3. Dynamically Created Views
    8. 2.8 Internationalizing Your App
      1. 2.8.1 Localization
      2. 2.8.2 Naming the Folders for Localized Resources
      3. 2.8.3 Adding String Translations to the App’s Project
      4. 2.8.4 Localizing Strings
      5. 2.8.5 Testing the App in Spanish on an AVD
      6. 2.8.6 Testing the App in Spanish on a Device
      7. 2.8.7 TalkBack and Localization
      8. 2.8.8 Localization Checklist
      9. 2.8.9 Professional Translation
    9. 2.9 Wrap-Up
    10. Self-Review Exercises
    11. Answers to Self-Review Exercises
    12. Exercises
  11. 3. Tip Calculator App
    1. 3.1 Introduction
      1. Note Regarding the Keyboard in Our Screen Captures
    2. 3.2 Test-Driving the Tip Calculator App
      1. Opening and Running the App
      2. Entering a Bill Total
      3. Selecting a Tip Percentage
    3. 3.3 Technologies Overview
      1. 3.3.1 Class Activity
      2. 3.3.2 Activity Lifecycle Methods
      3. 3.3.3 AppCompat Library and Class AppCompatActivity
      4. 3.3.4 Arranging Views with a GridLayout
      5. 3.3.5 Creating and Customizing the GUI with the Layout Editor and the Component Tree and Properties Windows
      6. 3.3.6 Formatting Numbers as Locale-Specific Currency and Percentage Strings
      7. 3.3.7 Implementing Interface TextWatcher for Handling EditText Text Changes
      8. 3.3.8 Implementing Interface OnSeekBarChangeListener for Handling SeekBar Thumb Position Changes
      9. 3.3.9 Material Themes
      10. 3.3.10 Material Design: Elevation and Shadows
      11. 3.3.11 Material Design: Colors
      12. 3.3.12 AndroidManifest.xml
      13. 3.3.13 Searching in the Properties Window
    4. 3.4 Building the GUI
      1. 3.4.1 GridLayout Introduction
      2. 3.4.2 Creating the TipCalculator Project
      3. 3.4.3 Changing to a GridLayout
      4. 3.4.4 Adding the TextViews, EditText and SeekBar
      5. 3.4.5 Customizing the Views
    5. 3.5 Default Theme and Customizing Theme Colors
      1. 3.5.1 parent Themes
      2. 3.5.2 Customizing Theme Colors
      3. 3.5.3 Common View Property Values as Styles
    6. 3.6 Adding the App’s Logic
      1. 3.6.1 package and import Statements
      2. 3.6.2 MainActivity Subclass of AppCompatActivity
      3. 3.6.3 Class Variables and Instance Variables
      4. 3.6.4 Overriding Activity Method onCreate
      5. 3.6.5 MainActivity Method calculate
      6. 3.6.6 Anonymous Inner Class That Implements Interface OnSeekBarChangeListener
      7. 3.6.7 Anonymous Inner Class That Implements Interface TextWatcher
    7. 3.7 AndroidManifest.xml
      1. 3.7.1 manifest Element
      2. 3.7.2 application Element
      3. 3.7.3 activity Element
      4. 3.7.4 intent-filter Element
    8. 3.8 Wrap-Up
    9. Self-Review Exercises
    10. Answers to Self-Review Exercises
    11. Exercises
  12. 4. Flag Quiz App
    1. 4.1 Introduction
    2. 4.2 Test-Driving the Flag Quiz App
      1. 4.2.1 Configuring the Quiz’s Settings
      2. 4.2.2 Taking the Quiz
    3. 4.3 Technologies Overview
      1. 4.3.1 Menus
      2. 4.3.2 Fragments
      3. 4.3.3 Fragment Lifecycle Methods
      4. 4.3.4 Managing Fragments
      5. 4.3.5 Preferences
      6. 4.3.6 assets Folder
      7. 4.3.7 Resource Folders
      8. 4.3.8 Supporting Different Screen Sizes and Resolutions
      9. 4.3.9 Determining the Device Orientation
      10. 4.3.10 Toasts for Displaying Messages
      11. 4.3.11 Using a Handler to Execute a Runnable in the Future
      12. 4.3.12 Applying an Animation to a View
      13. 4.3.13 Using ViewAnimationUtils to Create a Circular Reveal Animator
      14. 4.3.14 Specifying Colors Based on a View’s State Via a Color State List
      15. 4.3.15 AlertDialog
      16. 4.3.16 Logging Exception Messages
      17. 4.3.17 Launching Another Activity Via an Explicit Intent
      18. 4.3.18 Java Data Structures
      19. 4.3.19 Java SE 7 Features
      20. 4.3.20 AndroidManifest.xml
    4. 4.4 Creating the Project, Resource Files and Additional Classes
      1. 4.4.1 Creating the Project
      2. 4.4.2 Blank Activity Template Layouts
      3. 4.4.3 Configuring Java SE 7 Support
      4. 4.4.4 Adding the Flag Images to the Project
      5. 4.4.5 strings.xml and Formatted String Resources
      6. 4.4.6 arrays.xml
      7. 4.4.7 colors.xml
      8. 4.4.8 button_text_color.xml
      9. 4.4.9 Editing menu_main.xml
      10. 4.4.10 Creating the Flag Shake Animation
      11. 4.4.11 preferences.xml for Specifying the App’s Settings
      12. 4.4.12 Adding Classes SettingsActivity and SettingsActivityFragment to the Project
    5. 4.5 Building the App’s GUI
      1. 4.5.1 activity_main.xml Layout for Devices in Portrait Orientation
      2. 4.5.2 Designing fragment_main.xml Layout
      3. 4.5.3 Graphical Layout Editor Toolbar
      4. 4.5.4 content_main.xml Layout for Tablet Landscape Orientation
    6. 4.6 MainActivity Class
      1. 4.6.1 package Statement and import Statements
      2. 4.6.2 Fields
      3. 4.6.3 Overridden Activity Method onCreate
      4. 4.6.4 Overridden Activity Method onStart
      5. 4.6.5 Overridden Activity Method onCreateOptionsMenu
      6. 4.6.6 Overridden Activity Method onOptionsItemSelected
      7. 4.6.7 Anonymous Inner Class That Implements OnSharedPreferenceChangeListener
    7. 4.7 MainActivityFragment Class
      1. 4.7.1 package and import Statements
      2. 4.7.2 Fields
      3. 4.7.3 Overridden Fragment Method onCreateView
      4. 4.7.4 Method updateGuessRows
      5. 4.7.5 Method updateRegions
      6. 4.7.6 Method resetQuiz
      7. 4.7.7 Method loadNextFlag
      8. 4.7.8 Method getCountryName
      9. 4.7.9 Method animate
      10. 4.7.10 Anonymous Inner Class That Implements OnClickListener
      11. 4.7.11 Method disableButtons
    8. 4.8 SettingsActivity Class
    9. 4.9 SettingsActivityFragment Class
    10. 4.10 AndroidManifest.xml
      1. Launch Mode
    11. 4.11 Wrap-Up
    12. Self-Review Exercises
    13. Answers to Self-Review Exercises
    14. Exercises
    15. Project Exercises
  13. 5. Doodlz App
    1. 5.1 Introduction
    2. 5.2 Test-Driving the Doodlz App in an Android Virtual Device (AVD)
      1. Opening and Running the App
      2. Understanding the App’s Options
      3. Changing the Brush Color to Red
      4. Changing the Line Width
      5. Drawing the Flower Petals
      6. Changing the Brush Color to Dark Green
      7. Changing the Line Width and Drawing the Stem and Leaves
      8. Finishing the Drawing
      9. Saving the Image
      10. Printing the Image
    3. 5.3 Technologies Overview
      1. 5.3.1 Activity and Fragment Lifecycle Methods
      2. 5.3.2 Custom Views
      3. 5.3.3 Using SensorManager to Listen for Accelerometer Events
      4. 5.3.4 Custom DialogFragments
      5. 5.3.5 Drawing with Canvas, Paint and Bitmap
      6. 5.3.6 Processing Multiple Touch Events and Storing Lines in Paths
      7. 5.3.7 Saving to the Device
      8. 5.3.8 Printing and the Android Support Library’s PrintHelper Class
      9. 5.3.9 New Android 6.0 (Marshmallow) Permissions Model
      10. 5.3.10 Adding Dependencies Using the Gradle Build System
    4. 5.4 Creating the Project and Resources
      1. 5.4.1 Creating the Project
      2. 5.4.2 Gradle: Adding a Support Library to the Project
      3. 5.4.3 strings.xml
      4. 5.4.4 Importing the Material Design Icons for the App’s Menu Items
      5. 5.4.5 MainActivityFragment Menu
      6. 5.4.6 Adding a Permission to AndroidManifest.xml
    5. 5.5 Building the App’s GUI
      1. 5.5.1 content_main.xml Layout for MainActivity
      2. 5.5.2 fragment_main.xml Layout for MainActivityFragment
      3. 5.5.3 fragment_color.xml Layout for ColorDialogFragment
      4. 5.5.4 fragment_line_width.xml Layout for LineWidthDialogFragment
      5. 5.5.5 Adding Class EraseImageDialogFragment
    6. 5.6 MainActivity Class
    7. 5.7 MainActivityFragment Class
      1. 5.7.1 package Statement, import Statements and Fields
      2. 5.7.2 Overridden Fragment Method onCreateView
      3. 5.7.3 Methods onResume and enableAccelerometerListening
      4. 5.7.4 Methods onPause and disableAccelerometerListening
      5. 5.7.5 Anonymous Inner Class for Processing Accelerometer Events
      6. 5.7.6 Method confirmErase
      7. 5.7.7 Overridden Fragment Methods onCreateOptionsMenu and onOptionsItemSelected
      8. 5.7.8 Method saveImage
      9. 5.7.9 Overridden Method onRequestPermissionsResult
      10. 5.7.10 Methods getDoodleView and setDialogOnScreen
    8. 5.8 DoodleView Class
      1. 5.8.1 package Statement and import Statements
      2. 5.8.2 static and Instance Variables
      3. 5.8.3 Constructor
      4. 5.8.4 Overridden View Method onSizeChanged
      5. 5.8.5 Methods clear, setDrawingColor, getDrawingColor, setLineWidth and getLineWidth
      6. 5.8.6 Overridden View Method onDraw
      7. 5.8.7 Overridden View Method onTouchEvent
      8. 5.8.8 touchStarted Method
      9. 5.8.9 touchMoved Method
      10. 5.8.10 touchEnded Method
      11. 5.8.11 Method saveImage
      12. 5.8.12 Method printImage
    9. 5.9 ColorDialogFragment Class
      1. 5.9.1 Overridden DialogFragment Method onCreateDialog
      2. 5.9.2 Method getDoodleFragment
      3. 5.9.3 Overridden Fragment Lifecycle Methods onAttach and onDetach
      4. 5.9.4 Anonymous Inner Class That Responds to the Events of the Alpha, Red, Green and Blue SeekBars
    10. 5.10 LineWidthDialogFragment Class
      1. 5.10.1 Method onCreateDialog
      2. 5.10.2 Anonymous Inner Class That Responds to the Events of the widthSeekBar
    11. 5.11 EraseImageDialogFragment Class
    12. 5.12 Wrap-Up
    13. Self-Review Exercises
    14. Answers to Self-Review Exercises
    15. Exercises
  14. 6. Cannon Game App
    1. 6.1 Introduction
    2. 6.2 Test-Driving the Cannon Game App
      1. Opening and Running the App
      2. Playing the Game
    3. 6.3 Technologies Overview
      1. 6.3.1 Using the Resource Folder res/raw
      2. 6.3.2 Activity and Fragment Lifecycle Methods
      3. 6.3.3 Overriding View Method onTouchEvent
      4. 6.3.4 Adding Sound with SoundPool and AudioManager
      5. 6.3.5 Frame-by-Frame Animation with Threads, SurfaceView and SurfaceHolder
      6. 6.3.6 Simple Collision Detection
      7. 6.3.7 Immersive Mode
    4. 6.4 Building the GUI and Resource Files
      1. 6.4.1 Creating the Project
      2. 6.4.2 Adjusting the Theme to Remove the App Title and App Bar
      3. 6.4.3 strings.xml
      4. 6.4.4 Colors
      5. 6.4.5 Adding the Sounds to the App
      6. 6.4.6 Adding Class MainActivityFragment
      7. 6.4.7 Editing activity_main.xml
      8. 6.4.8 Adding the CannonView to fragment_main.xml
    5. 6.5 Overview of This App’s Classes
    6. 6.6 MainActivity Subclass of Activity
    7. 6.7 MainActivityFragment Subclass of Fragment
    8. 6.8 Class GameElement
      1. 6.8.1 Instance Variables and Constructor
      2. 6.8.2 Methods update, draw, and playSound
    9. 6.9 Blocker Subclass of GameElement
    10. 6.10 Target Subclass of GameElement
    11. 6.11 Cannon Class
      1. 6.11.1 Instance Variables and Constructor
      2. 6.11.2 Method align
      3. 6.11.3 Method fireCannonball
      4. 6.11.4 Method draw
      5. 6.11.5 Methods getCannonball and removeCannonball
    12. 6.12 Cannonball Subclass of GameElement
      1. 6.12.1 Instance Variables and Constructor
      2. 6.12.2 Methods getRadius, collidesWith, isOnScreen, and reverseVelocityX
      3. 6.12.3 Method update
      4. 6.12.4 Method draw
    13. 6.13 CannonView Subclass of SurfaceView
      1. 6.13.1 package and import Statements
      2. 6.13.2 Instance Variables and Constants
      3. 6.13.3 Constructor
      4. 6.13.4 Overriding View Method onSizeChanged
      5. 6.13.5 Methods getScreenWidth, getScreenHeight, and playSound
      6. 6.13.6 Method newGame
      7. 6.13.7 Method updatePositions
      8. 6.13.8 Method alignAndFireCannonball
      9. 6.13.9 Method showGameOverDialog
      10. 6.13.10 Method drawGameElements
      11. 6.13.11 Method testForCollisions
      12. 6.13.12 Methods stopGame and releaseResources
      13. 6.13.13 Implementing the SurfaceHolder.Callback Methods
      14. 6.13.14 Overriding View Method onTouchEvent
      15. 6.13.15 CannonThread: Using a Thread to Create a Game Loop
      16. 6.13.16 Methods hideSystemBars and showSystemBars
    14. 6.14 Wrap-Up
    15. Self-Review Exercises
    16. Answers to Self-Review Exercises
    17. Exercises
  15. 7. WeatherViewer App
    1. 7.1 Introduction
    2. 7.2 Test-Driving the WeatherViewer App
      1. Opening and Running the App
      2. Viewing a City’s 16-Day Weather Forecast
    3. 7.3 Technologies Overview
      1. 7.3.1 Web Services
      2. 7.3.2 JavaScript Object Notation (JSON) and the org.json Package
      3. 7.3.3 HttpUrlConnection Invoking a REST Web Service
      4. 7.3.4 Using AsyncTask to Perform Network Requests Outside the GUI Thread
      5. 7.3.5 ListView, ArrayAdapter and the View-Holder Pattern
      6. 7.3.6 FloatingActionButton
      7. 7.3.7 TextInputLayout
      8. 7.3.8 Snackbar
    4. 7.4 Building the App’s GUI and Resource Files
      1. 7.4.1 Creating the Project
      2. 7.4.2 AndroidManifest.xml
      3. 7.4.3 strings.xml
      4. 7.4.4 colors.xml
      5. 7.4.5 activity_main.xml
      6. 7.4.6 content_main.xml
      7. 7.4.7 list_item.xml
    5. 7.5 Class Weather
      1. 7.5.1 package Statement, import Statements and Instance Variables
      2. 7.5.2 Constructor
      3. 7.5.3 Method convertTimeStampToDay
    6. 7.6 Class WeatherArrayAdapter
      1. 7.6.1 package Statement and import Statements
      2. 7.6.2 Nested Class ViewHolder
      3. 7.6.3 Instance Variable and Constructor
      4. 7.6.4 Overridden ArrayAdapter Method getView
      5. 7.6.5 AsyncTask Subclass for Downloading Images in a Separate Thread
    7. 7.7 Class MainActivity
      1. 7.7.1 package Statement and import Statements
      2. 7.7.2 Instance Variables
      3. 7.7.3 Overridden Activity Method onCreate
      4. 7.7.4 Methods dismissKeyboard and createURL
      5. 7.7.5 AsyncTask Subclass for Invoking a Web Service
      6. 7.7.6 Method convertJSONtoArrayList
    8. 7.8 Wrap-Up
    9. Self-Review Exercises
    10. Answers to Self-Review Exercises
    11. Exercises
    12. Web Services and Mashups
  16. 8. Twitter® Searches App
    1. 8.1 Introduction
    2. 8.2 Test-Driving the App
      1. Opening and Running the App
      2. 8.2.1 Adding a Favorite Search
      3. 8.2.2 Viewing Twitter Search Results
      4. 8.2.3 Editing a Search
      5. 8.2.4 Sharing a Search
      6. 8.2.5 Deleting a Search
      7. 8.2.6 Scrolling Through Saved Searches
    3. 8.3 Technologies Overview
      1. 8.3.1 Storing Key–Value Data in a SharedPreferences File
      2. 8.3.2 Implicit Intents and Intent Choosers
      3. 8.3.3 RecyclerView
      4. 8.3.4 RecyclerView.Adapter and RecyclerView.ViewHolder
      5. 8.3.5 RecyclerView.ItemDecoration
      6. 8.3.6 Displaying a List of Options in an AlertDialog
    4. 8.4 Building the App’s GUI and Resource Files
      1. 8.4.1 Creating the Project
      2. 8.4.2 AndroidManifest.xml
      3. 8.4.3 Adding the RecyclerView Library
      4. 8.4.4 colors.xml
      5. 8.4.5 strings.xml
      6. 8.4.6 arrays.xml
      7. 8.4.7 dimens.xml
      8. 8.4.8 Adding the Save Button Icon
      9. 8.4.9 activity_main.xml
      10. 8.4.10 content_main.xml
      11. 8.4.11 RecyclerView Item’s Layout: list_item.xml
    5. 8.5 MainActivity Class
      1. 8.5.1 package and import Statements
      2. 8.5.2 MainActivity Fields
      3. 8.5.3 Overriden Activity Method onCreate
      4. 8.5.4 TextWatcher Event Handler and Method updateSaveFAB
      5. 8.5.5 saveButton’s OnClickListener
      6. 8.5.6 addTaggedSearch Method
      7. 8.5.7 Anonymous Inner Class That Implements View.OnClickListener to Display Search Results
      8. 8.5.8 Anonymous Inner Class That Implements View.OnLongClickListener to Share, Edit or Delete a Search
      9. 8.5.9 shareSearch Method
      10. 8.5.10 deleteSearch Method
    6. 8.6 SearchesAdapter Subclass of RecyclerView.Adapter
      1. 8.6.1 package Statement, import statements, Instance Variables and Constructor
      2. 8.6.2 Nested ViewHolder Subclass of RecyclerView.ViewHolder
      3. 8.6.3 Overridden RecyclerView.Adapter Methods
    7. 8.7 ItemDivider Subclass of RecyclerView.ItemDecoration
      1. Overriding the onDrawOver Method
    8. 8.8 A Note on Fabric: Twitter’s New Mobile Development Platform
    9. 8.9 Wrap-Up
    10. Self-Review Exercises
    11. Answers to Self-Review Exercises
    12. Exercises
    13. Project Exercises
      1. Advanced Project Exercises
  17. 9. Address Book App
    1. 9.1 Introduction
    2. 9.2 Test-Driving the Address Book App
      1. Opening and Running the App
      2. 9.2.1 Adding a Contact
      3. 9.2.2 Viewing a Contact
      4. 9.2.3 Editing a Contact
      5. 9.2.4 Deleting a Contact
    3. 9.3 Technologies Overview
      1. 9.3.1 Displaying Fragments with FragmentTransactions
      2. 9.3.2 Communicating Data Between a Fragment and a Host Activity
      3. 9.3.3 Manipulating a SQLite Database
      4. 9.3.4 ContentProviders and ContentResolvers
      5. 9.3.5 Loader and LoaderManager—Asynchronous Database Access
      6. 9.3.6 Defining Styles and Applying Them to GUI Components
      7. 9.3.7 Specifying a TextView Background
    4. 9.4 Building the GUI and Resource Files
      1. 9.4.1 Creating the Project
      2. 9.4.2 Creating the App’s Classes
      3. 9.4.3 Add the App’s Icons
      4. 9.4.4 strings.xml
      5. 9.4.5 styles.xml
      6. 9.4.6 textview_border.xml
      7. 9.4.7 MainActivity’s Layout
      8. 9.4.8 ContactsFragment’s Layout
      9. 9.4.9 DetailFragment’s Layout
      10. 9.4.10 AddEditFragment’s Layout
      11. 9.4.11 DetailFragment’s Menu
    5. 9.5 Overview of This Chapter’s Classes
      1. com.deitel.addressbook.data Package
      2. com.deitel.addressbook Package
    6. 9.6 DatabaseDescription Class
      1. 9.6.1 static Fields
      2. 9.6.2 Nested Class Contact
    7. 9.7 AddressBookDatabaseHelper Class
      1. Constructor
      2. Overridden Methods
    8. 9.8 AddressBookContentProvider Class
      1. 9.8.1 AddressBookContentProvider Fields
      2. 9.8.2 Overridden Methods onCreate and getType
      3. 9.8.3 Overridden Method query
      4. 9.8.4 Overridden Method insert
      5. 9.8.5 Overridden Method update
      6. 9.8.6 Overridden Method delete
    9. 9.9 MainActivity Class
      1. 9.9.1 Superclass, Implemented Interfaces and Fields
      2. 9.9.2 Overridden Method onCreate
      3. 9.9.3 ContactsFragment.ContactsFragmentListener Methods
      4. 9.9.4 Method displayContact
      5. 9.9.5 Method displayAddEditFragment
      6. 9.9.6 DetailFragment.DetailFragmentListener Methods
      7. 9.9.7 AddEditFragment.AddEditFragmentListener Method
    10. 9.10 ContactsFragment Class
      1. 9.10.1 Superclass and Implemented Interface
      2. 9.10.2 ContactsFragmentListener
      3. 9.10.3 Fields
      4. 9.10.4 Overridden Fragment Method onCreateView
      5. 9.10.5 Overridden Fragment Methods onAttach and onDetach
      6. 9.10.6 Overridden Fragment Method onActivityCreated
      7. 9.10.7 Method updateContactList
      8. 9.10.8 LoaderManager.LoaderCallbacks<Cursor> Methods
    11. 9.11 ContactsAdapter Class
      1. Nested Interface ContactClickListener
      2. Nested Class ViewHolder
      3. Overridden RecyclerView.Adapter Method onCreateViewHolder
      4. Overridden RecyclerView.Adapter Method onBindViewHolder
      5. Overridden RecyclerView.Adapter Method getItemCount
      6. Method swapCursor
    12. 9.12 AddEditFragment Class
      1. 9.12.1 Superclass and Implemented Interface
      2. 9.12.2 AddEditFragmentListener
      3. 9.12.3 Fields
      4. 9.12.4 Overridden Fragment Methods onAttach, onDetach and onCreateView
      5. 9.12.5 TextWatcher nameChangedListener and Method updateSaveButtonFAB
      6. 9.12.6 View.OnClickListener saveContactButtonClicked and Method saveContact
      7. 9.12.7 LoaderManager.LoaderCallbacks<Cursor> Methods
    13. 9.13 DetailFragment Class
      1. 9.13.1 Superclass and Implemented Interface
      2. 9.13.2 DetailFragmentListener
      3. 9.13.3 Fields
      4. 9.13.4 Overridden Methods onAttach, onDetach and onCreateView
      5. 9.13.5 Overridden Methods onCreateOptionsMenu and onOptionsItemSelected
      6. 9.13.6 Method deleteContact and DialogFragment confirmDelete
      7. 9.13.7 LoaderManager.LoaderCallback<Cursor> Methods
    14. 9.14 Wrap-Up
    15. Self-Review Exercises
    16. Answers to Self-Review Exercises
    17. Exercises
  18. 10. Google Play and App Business Issues
    1. 10.1 Introduction
    2. 10.2 Preparing Your Apps for Publication
      1. 10.2.1 Testing Your App
      2. 10.2.2 End User License Agreement
      3. 10.2.3 Icons and Labels
      4. 10.2.4 Versioning Your App
      5. 10.2.5 Licensing to Control Access to Paid Apps
      6. 10.2.6 Obfuscating Your Code
      7. 10.2.7 Getting a Private Key for Digitally Signing Your App
      8. 10.2.8 Featured Image and Screenshots
      9. 10.2.9 Promotional App Video
    3. 10.3 Pricing Your App: Free or Fee
      1. 10.3.1 Paid Apps
      2. 10.3.2 Free Apps
    4. 10.4 Monetizing Apps with In-App Advertising
    5. 10.5 Monetizing Apps: Using In-App Billing to Sell Virtual Goods
      1. In-App Purchase for Apps Sold Through Other App Marketplaces
    6. 10.6 Registering at Google Play
    7. 10.7 Setting Up a Google Payments Merchant Account
    8. 10.8 Uploading Your Apps to Google Play
    9. 10.9 Launching Play Store from Within Your App
    10. 10.10 Managing Your Apps in Google Play
    11. 10.11 Other Android App Marketplaces
    12. 10.12 Other Mobile App Platforms and Porting Your Apps
    13. 10.13 Marketing Your Apps
      1. Facebook
      2. Twitter
      3. Viral Video
      4. E-Mail Newsletters
      5. App Reviews
      6. Internet Public Relations
      7. Mobile Advertising Networks
    14. 10.14 Wrap-Up
      1. Staying in Contact with the Authors and Deitel & Associates, Inc.
    15. Self-Review Exercises
    16. Answers to Self-Review Exercises
    17. Exercises
  19. A. Introduction to Java Applications
    1. A.1 Introduction
    2. A.2 Your First Program in Java: Printing a Line of Text
      1. Commenting Your Programs
      2. Using Blank Lines
      3. Declaring a Class
      4. Class Names and Identifiers
      5. Declaring a Method
      6. Performing Output with System.out.println
      7. Using End-of-Line Comments on Right Braces for Readability
      8. Compiling and Executing Your First Java Application
    3. A.3 Modifying Your First Java Program
      1. Displaying Multiple Lines of Text with a Single Statement
    4. A.4 Displaying Text with printf
    5. A.5 Another Application: Adding Integers
      1. Import Declarations
      2. Declaring Class Addition
      3. Declaring and Creating a Scanner to Obtain User Input from the Keyboard
      4. Declaring Variables to Store Integers
      5. Prompting the User for Input
      6. Obtaining an int as Input from the User
      7. Prompting for and Inputting a Second int
      8. Using Variables in a Calculation
      9. Displaying the Result of the Calculation
      10. Java API Documentation
    6. A.6 Memory Concepts
    7. A.7 Arithmetic
      1. Arithmetic Expressions in Straight-Line Form
      2. Parentheses for Grouping Subexpressions
      3. Rules of Operator Precedence
      4. Sample Algebraic and Java Expressions
      5. Evaluation of a Second-Degree Polynomial
    8. A.8 Decision Making: Equality and Relational Operators
    9. A.9 Wrap-Up
    10. Self-Review Exercises
    11. Answers to Self-Review Exercises
    12. Exercises
  20. B. Introduction to Classes, Objects, Methods and Strings
    1. B.1 Introduction
    2. B.2 Declaring a Class with a Method and Instantiating an Object of a Class
      1. Class GradeBook
      2. Class GradeBookTest
      3. Compiling an Application with Multiple Classes
    3. B.3 Declaring a Method with a Parameter
      1. Arguments to a Method
      2. Class Declaration with a Method That Has One Parameter
      3. More on Arguments and Parameters
      4. Notes on import Declarations
    4. B.4 Instance Variables, set Methods and get Methods
      1. GradeBook Class with an Instance Variable, a set Method and a get Method
      2. Access Modifiers public and private
      3. Methods setCourseName and getCourseName
      4. Method displayMessage
      5. GradeBookTest Class That Demonstrates Class GradeBook
      6. set and get Methods
    5. B.5 Primitive Types vs. Reference Types
    6. B.6 Initializing Objects with Constructors
      1. Constructors with Multiple Parameters
    7. B.7 Floating-Point Numbers and Type double
      1. Floating-Point Number Precision and Memory Requirements
      2. Account Class with an Instance Variable of Type double
      3. AccountTest Class to Use Class Account
    8. B.8 Wrap-Up
    9. Self-Review Exercises
    10. Answers to Self-Review Exercises
    11. Exercises
  21. C. Control Statements
    1. C.1 Introduction
    2. C.2 Algorithms
    3. C.3 Pseudocode
    4. C.4 Control Structures
      1. Sequence Structure in Java
      2. Selection Statements in Java
      3. Repetition Statements in Java
    5. C.5 if Single-Selection Statement
    6. C.6 if…else Double-Selection Statement
      1. Conditional Operator (?:)
      2. Nested if…else Statements
      3. Blocks
    7. C.7 while Repetition Statement
    8. C.8 Case Study: Counter-Controlled Repetition
      1. Pseudocode Algorithm with Counter-Controlled Repetition
      2. Implementing Counter-Controlled Repetition in Class GradeBook
      3. Class GradeBookTest
      4. Notes on Integer Division and Truncation
    9. C.9 Case Study: Sentinel-Controlled Repetition
      1. Implementing Sentinel-Controlled Repetition in Class GradeBook
      2. Program Logic for Sentinel-Controlled Repetition vs. Counter-Controlled Repetition
      3. Explicitly and Implicitly Converting Between Primitive Types
    10. C.10 Case Study: Nested Control Statements
    11. C.11 Compound Assignment Operators
    12. C.12 Increment and Decrement Operators
    13. C.13 Primitive Types
    14. C.14 Essentials of Counter-Controlled Repetition
    15. C.15 for Repetition Statement
      1. A Closer Look at the for Statement’s Header
      2. Scope of a for Statement’s Control Variable
      3. Expressions in a for Statement’s Header Are Optional
    16. C.16 Examples Using the for Statement
      1. Application: Compound-Interest Calculations
      2. Formatting Strings with Field Widths and Justification
      3. Performing the Interest Calculations
      4. Formatting Floating-Point Numbers
    17. C.17 do…while Repetition Statement
    18. C.18 switch Multiple-Selection Statement
      1. GradeBook Class with switch Statement to Count A, B, C, D and F Grades
      2. Method inputGrades
      3. Method incrementLetterGradeCounter
      4. GradeBookTest Class That Demonstrates Class GradeBook
      5. Notes on the Expression in Each case of a switch
      6. Using Strings in switch Statements (Java SE 7)
    19. C.19 break and continue Statements
      1. break Statement
      2. continue Statement
    20. C.20 Logical Operators
      1. Conditional AND (&&) Operator
      2. Conditional OR (||) Operator
      3. Short-Circuit Evaluation of Complex Conditions
      4. Boolean Logical AND (&) and Boolean Logical Inclusive OR (|) Operators
      5. Boolean Logical Exclusive OR (^)
      6. Logical Negation (!) Operator
    21. C.21 Wrap-Up
    22. Self-Review Exercises (Sections C.1–C.13)
    23. Self-Review Exercises (Sections C.14–C.20)
    24. Answers to Self-Review Exercises (Sections C.1–C.13)
    25. Answers to Self-Review Exercises (Sections C.14–C.20)
    26. Exercises (Sections C.1–C.13)
    27. Exercises (Sections C.14–C.20)
  22. D. Methods: A Deeper Look
    1. D.1 Introduction
    2. D.2 Program Modules in Java
    3. D.3 static Methods, static Fields and Class Math
      1. Math Class Constants PI and E
      2. Why Is Method main Declared static?
    4. D.4 Declaring Methods with Multiple Parameters
      1. The public and static Keywords
      2. Method maximum
      3. Implementing Method maximum by Reusing Method Math.max
      4. Assembling Strings with String Concatenation
    5. D.5 Notes on Declaring and Using Methods
    6. D.6 Method-Call Stack and Activation Records
    7. D.7 Argument Promotion and Casting
    8. D.8 Java API Packages
    9. D.9 Introduction to Random-Number Generation
      1. D.9.1 Scaling and Shifting of Random Numbers
      2. D.9.2 Random-Number Repeatability for Testing and Debugging
    10. D.10 Case Study: A Game of Chance; Introducing Enumerations
      1. Method rollDice
      2. Method main’s Local Variables
      3. enum Type Status
      4. Logic of the main Method
      5. Why Some Constants Are Not Defined as enum Constants
    11. D.11 Scope of Declarations
    12. D.12 Method Overloading
      1. Declaring Overloaded Methods
      2. Distinguishing Between Overloaded Methods
      3. Return Types of Overloaded Methods
    13. D.13 Wrap-Up
    14. Self-Review Exercises
    15. Answers to Self-Review Exercises
    16. Exercises
  23. E. Arrays and ArrayLists
    1. E.1 Introduction
    2. E.2 Arrays
    3. E.3 Declaring and Creating Arrays
    4. E.4 Examples Using Arrays
      1. Creating and Initializing an Array
      2. Using an Array Initializer
      3. Calculating the Values to Store in an Array
      4. Using Bar Charts to Display Array Data Graphically
      5. Using the Elements of an Array as Counters
      6. Using Arrays to Analyze Survey Results
      7. The frequency Array
      8. Summarizing the Results
      9. Exception Handling: Processing the Incorrect Response
      10. The try Statement
      11. Executing the catch Block
      12. toString Method of the Exception Parameter
    5. E.5 Case Study: Card Shuffling and Dealing Simulation
      1. Class Card
      2. Class DeckOfCards
      3. DeckOfCards Constructor
      4. DeckOfCards Method shuffle
      5. DeckOfCards Method dealCard
      6. Shuffling and Dealing Cards
    6. E.6 Enhanced for Statement
    7. E.7 Passing Arrays to Methods
      1. Notes on Passing Arguments to Methods
    8. E.8 Case Study: Class GradeBook Using an Array to Store Grades
      1. Storing Student Grades in an Array in Class GradeBook
      2. Class GradeBookTest That Demonstrates Class GradeBook
    9. E.9 Multidimensional Arrays
      1. Arrays of One-Dimensional Arrays
      2. Two-Dimensional Arrays with Rows of Different Lengths
      3. Creating Two-Dimensional Arrays with Array-Creation Expressions
      4. Two-Dimensional Array Example: Displaying Element Values
      5. Common Multidimensional-Array Manipulations Performed with for Statements
    10. E.10 Case Study: Class GradeBook Using a Two-Dimensional Array
      1. Storing Student Grades in a Two-Dimensional Array in Class GradeBook
      2. Methods getMinimum and getMaximum
      3. Method outputBarChart
      4. Method outputGrades
      5. Method getAverage
      6. Class GradeBookTest That Demonstrates Class GradeBook
    11. E.11 Class Arrays
    12. E.12 Introduction to Collections and Class ArrayList
    13. E.13 Wrap-Up
    14. Self-Review Exercises
    15. Answers to Self-Review Exercises
    16. Exercises
  24. F. Classes and Objects: A Deeper Look
    1. F.1 Introduction
    2. F.2 Time Class Case Study
      1. Time1 Class Declaration
      2. Default Constructor
      3. Method setTime and Throwing Exceptions
      4. Method toUniversalString
      5. Method toString
      6. Using Class Time1
      7. Calling Time1 Method setTime with Invalid Values
      8. Notes on the Time1 Class Declaration
    3. F.3 Controlling Access to Members
    4. F.4 Referring to the Current Object’s Members with the this Reference
    5. F.5 Time Class Case Study: Overloaded Constructors
      1. Class Time2 with Overloaded Constructors
      2. Class Time2’s Constructors
      3. Class Time2’s setTime Method
      4. Notes Regarding Class Time2’s set and get Methods and Constructors
      5. Using Class Time2’s Overloaded Constructors
    6. F.6 Default and No-Argument Constructors
    7. F.7 Composition
      1. Class Date
      2. Class Employee
      3. Class EmployeeTest
    8. F.8 Enumerations
    9. F.9 Garbage Collection
    10. F.10 static Class Members
      1. Tracking the Number of Employee Objects That Have Been Created
    11. F.11 final Instance Variables
    12. F.12 Packages
    13. F.13 Package Access
    14. F.14 Wrap-Up
    15. Self-Review Exercise
    16. Answers to Self-Review Exercise
    17. Exercises
  25. G. Object-Oriented Programming: Inheritance and Polymorphism
    1. G.1 Introduction to Inheritance
    2. G.2 Superclasses and Subclasses
      1. University Community Member Hierarchy
      2. Shape Hierarchy
    3. G.3 protected Members
    4. G.4 Relationship between Superclasses and Subclasses
      1. G.4.1 Creating and Using a CommissionEmployee Class
      2. G.4.2 Creating and Using a BasePlusCommissionEmployee Class
      3. G.4.3 Creating a CommissionEmployee–BasePlusCommissionEmployee Inheritance Hierarchy
      4. G.4.4 CommissionEmployee–BasePlusCommissionEmployee Inheritance Hierarchy Using protected Instance Variables
      5. G.4.5 CommissionEmployee–BasePlusCommissionEmployee Inheritance Hierarchy Using private Instance Variables
    5. G.5 Class Object
    6. G.6 Introduction to Polymorphism
      1. Programming in the Specific
      2. Interfaces
    7. G.7 Polymorphism: An Example
      1. Space Objects in a Video Game
    8. G.8 Demonstrating Polymorphic Behavior
    9. G.9 Abstract Classes and Methods
      1. Purpose of Abstract Classes
      2. Declaring an Abstract Class and Abstract Methods
      3. Using Abstract Classes to Declare Variables
    10. G.10 Case Study: Payroll System Using Polymorphism
      1. G.10.1 Abstract Superclass Employee
      2. G.10.2 Concrete Subclass SalariedEmployee
      3. G.10.3 Concrete Subclass HourlyEmployee
      4. G.10.4 Concrete Subclass CommissionEmployee
      5. G.10.5 Indirect Concrete Subclass BasePlusCommissionEmployee
      6. G.10.6 Polymorphic Processing, Operator instanceof and Downcasting
      7. G.10.7 Summary of the Allowed Assignments Between Superclass and Subclass Variables
    11. G.11 final Methods and Classes
      1. Final Methods Cannot Be Overridden
      2. Final Classes Cannot Be Superclasses
    12. G.12 Case Study: Creating and Using Interfaces
      1. Standardizing Interactions
      2. Software Objects Communicate Via Interfaces
      3. Using an Interface
      4. Relating Disparate Types
      5. Interfaces vs. Abstract Classes
      6. Tagging Interfaces
      7. G.12.1 Developing a Payable Hierarchy
      8. G.12.2 Interface Payable
      9. G.12.3 Class Invoice
      10. G.12.4 Modifying Class Employee to Implement Interface Payable
      11. G.12.5 Modifying Class SalariedEmployee for Use in the Payable Hierarchy
      12. G.12.6 Using Interface Payable to Process Invoices and Employees Polymorphically
    13. G.13 Common Interfaces of the Java API
    14. G.14 Wrap-Up
    15. Self-Review Exercises (Sections G.1G.5)
    16. Self-Review Exercises (Sections G.6G.13)
    17. Answers to Self-Review Exercises (Sections G.1G.5)
    18. Answers to Self-Review Exercises (Sections G.6G.13)
    19. Exercises (Sections G.1G.5)
    20. Exercises (Sections G.6G.13)
  26. H. Exception Handling: A Deeper Look
    1. H.1 Introduction
    2. H.2 Example: Divide by Zero without Exception Handling
    3. H.3 Example: Handling ArithmeticExceptions and InputMismatchExceptions
      1. Enclosing Code in a try Block
      2. Catching Exceptions
      3. Termination Model of Exception Handling
      4. Using the throws Clause
    4. H.4 When to Use Exception Handling
    5. H.5 Java Exception Hierarchy
      1. Checked vs. Unchecked Exceptions
      2. Catching Subclass Exceptions
      3. Only the First Matching catch Executes
    6. H.6 finally Block
      1. Throwing Exceptions Using the throw Statement
      2. Rethrowing Exceptions
    7. H.7 Stack Unwinding and Obtaining Information from an Exception Object
      1. Stack Unwinding
      2. Obtaining Data from an Exception Object
    8. H.8 Wrap-Up
    9. Self-Review Exercises
    10. Answers to Self-Review Exercises
    11. Exercises
  27. I. GUI Components and Event Handling
    1. I.1 Introduction
    2. I.2 Nimbus Look-and-Feel
    3. I.3 Text Fields and an Introduction to Event Handling with Nested Classes
      1. Specifying the Layout
      2. Creating the GUI
      3. Steps Required to Set Up Event Handling for a GUI Component
      4. Using a Nested Class to Implement an Event Handler
      5. Nested Class TextFieldHandler
      6. Registering the Event Handler for Each Text Field
      7. Details of Class TextFieldHandler’s actionPerformed Method
      8. Class TextFieldTest
    4. I.4 Common GUI Event Types and Listener Interfaces
    5. I.5 How Event Handling Works
      1. Registering Events
      2. Event-Handler Invocation
    6. I.6 JButton
    7. Accessing the this Reference in an Object of a Top-Level Class From a Nested Class
    8. I.7 JComboBox; Using an Anonymous Inner Class for Event Handling
      1. Using an Anonymous Inner Class for Event Handling
    9. I.8 Adapter Classes
    10. I.9 Wrap-Up
    11. Self-Review Exercises
    12. Answers to Self-Review Exercises
    13. Exercises
  28. J. Other Java Topics
    1. J.1 Introduction
    2. J.2 Collections Overview
    3. J.3 Type-Wrapper Classes for Primitive Types
      1. Autoboxing and Auto-Unboxing
    4. J.4 Interface Collection and Class Collections
    5. J.5 Lists
      1. J.5.1 ArrayList and Iterator
      2. J.5.2 LinkedList
      3. J.5.3 Views into Collections and Arrays Method asList
    6. J.6 Collections Methods
      1. J.6.1 Method sort
      2. J.6.2 Method shuffle
    7. J.7 Interface Queue
    8. J.8 Sets
      1. Sorted Sets
    9. J.9 Maps
    10. J.10 Introduction to Files and Streams
      1. Files as Streams of Bytes
      2. Byte-Based and Character-Based Streams
      3. Opening a File
      4. The java.io Package
    11. J.11 Class File
      1. Creating File Objects
    12. J.12 Introduction to Object Serialization
      1. Classes ObjectInputStream and ObjectOutputStream
      2. Interfaces ObjectOutput and ObjectInput
    13. J.13 Introduction to Multithreading
      1. Java Concurrency
      2. Concurrent Programming Uses
      3. Concurrent Programming Is Difficult
      4. Use the Prebuilt Classes of the Concurrency APIs Whenever Possible
    14. J.14 Creating and Executing Threads with the Executor Framework
      1. Creating Concurrent Tasks with the Runnable Interface
      2. Executing Runnable Objects with an Executor
      3. Using Class Executors to Obtain an ExecutorService
      4. Implementing the Runnable Interface
    15. J.15 Overview of Thread Synchronization
      1. Monitors
    16. J.16 Concurrent Collections Overview
    17. J.17 Multithreading with GUI
      1. Class SwingWorker
      2. Performing Tasks in a Worker Thread
      3. Class FibonacciNumbers
    18. J.18 Wrap-Up
    19. Self-Review Exercises
    20. Answers to Self-Review Exercises
    21. Execises
  29. K. Operator Precedence Chart
  30. L. Primitive Types
  31. Index
  32. Code Snippets