Errata for The Busy Coder's Guide to Android Development

A quick reminder: if you see problems in the book that are not listed here, report them via the Book Bug Bounty program!

Note: page numbers refer to the page numbers shown on the bottom of each page in the PDF edition of the book

Version 4.8 (digital) - May 2013

  1. Page 383 refers to AddStringsTask, which should be AddStringTask
  2. Page 618 is missing a period after the first sentence of the "Archetype: Scheduled Service Polling" section
  3. Page 692 has FragmenManager, which should be FragmentManager
  4. Page 702 indicates that fragments cannot be included inside other fragments, which is not true for Android 4.2+ or the Android Support package
  5. Page 735 is missing the content for the "Getting Your News Fix" section
  6. Pages 800-801, in three captions, refer to TabFragmentDemo as TabFragmentsDemo
  7. Page 1135 has "we exploring" instead of "we explored"
  8. Page 1208 has "and cause cause excessive", which should be "and can cause excessive"
  9. Page 1133 has an unexpanded "LOCALINCLUDE" macro, which should be showing the contents of the project's MainActivity.java file
  10. Page 1342 has "no matter how the enter the app" instead of "no matter how they enter the app"
  11. Page 1342, in the 5th paragraph, has "eclipse.ini" running right into "file" without an intervening space

Version 4.7 (digital) - March 2013

  1. Page 15 has "a emulator" instead of "an emulator" in the last paragraph
  2. Page 49 has "e.g,." instead of "e.g.,"
  3. Page 68 has "an resource" instead of "a resource"
  4. Page 137, in the second paragraph, indicates that LinearLayout is covered in this chapter; it was actually covered in the preceding chapter
  5. Page 719, in the context of AsyncTask behavior, has "set your targetSdkVersion to be 14 or higher", when the proper value is 13 (or higher)
  6. Page 854 has "but no new Maps V2 API keys are being offered", which should be "but no new Maps V1 API keys are being offered"
  7. Page 1141 has "want do deliver" instead of "want to deliver"
  8. Page 1240 has some unexpanded LOCALINCLUDE macros
  9. Page 1262 has "cases where is" instead of "cases where it is"

Version 4.6 (digital) - February 2013

  1. Page 193, Figure 106, references a DynamicDemo project, whose name is merely Dynamic
  2. Page 258 refers to an "Add:" TextView, which is actually a "Word:" TextView
  3. Page 527 has "help the user install it if is not" instead of "help the user install it if it is not"
  4. Page 541 has "The OnBootCompleted BroadcastReceiver", which should just be "OnBootReceiver"
  5. Page 872 has a link to the section on Traceview that does not work
  6. Page 1165 has "corresponding column name" instead of "corresponding column names"
  7. Pages 1167-1169 have code listings that have extra lines or are missing lines
  8. Page 1281 has "occurrs" instead of "occurs"
  9. Page 1345 has Object[> instead of Object[] and byte[> instead of byte[]
  10. Page 1356 has byte[> instead of byte[]
  11. Page 1551 has an incorrect screenshot (Figure 414)
  12. Page 1561 shows EXTRA_EMAIL as being a string, when it should be a string array
  13. Page 1571's third paragraph should be linking to the chapter on JARs and library projects, instead of having those rogue brackets and such
  14. Page 1574 twice has int[> instead of int[]
  15. Page 1815 has char [> instead of char[]
  16. Tutorial #13, when adding the Preferences activity, you will need to add @TargetApi(Build.VERSION_CODES.HONEYCOMB) to the onBuildHeaders() method
  17. Tutorial #17 does not correctly show converting the services to WakefulIntentService

Version 4.5 (digital) - January 2013

  1. Page 70 has "under what circumstances should the images stored in those directories be used", which should be "under what circumstances the images stored in those directories should be used"
  2. Page 163, Step #1 of Tutorial #5 asks you to delete the hello string resource, but it really should be the hello_world string resource
  3. Page 233 has "to help explain what an action bar it", which should be "to help explain what an action bar is"
  4. Page 241 has "what you would ordinary need", which should be "what you would ordinarily need"
  5. Page 346 is missing the last line of its first code listing — please add android:visibility="gone"/>
  6. Page 495 refers to NotesActivity, which should be NoteActivity
  7. Page 505, in the second block of code, is missing the return(result); statement and closing brace
  8. Page 567 has an extraneous android:onClick attribute in the first code block
  9. Page 844, the caption for figure 258 has "Referencd" instead of "Referenced"
  10. Page 874 has "drawn over top lines with", which should be "drawn over the top of lines with"
  11. Page 944 has "drawable to 50% the height", which should be "drawable to 50% of the height"
  12. Page 1005 has "the will not be clicked" instead of "they will not be clicked"
  13. Page 1046 has "defintion" instead of "definition"
  14. Page 1083 has the wrong code listing -- the correct code can be found in the GitHub repo
  15. Page 1107 cites the Android 1.x/2.x way of adding app widgets to the home screen and not the newer approach used on Android 3.0+
  16. Page 1130 has RemoteViewService instead of RemoteViewsService
  17. Page 1139 and 1140 have the wrong images for Figure 354 and 355
  18. Page 1145 references a non-existent addId() method on Uri
  19. Page 1152 (and a few other spots in this chapter) have String[> instead of String[]
  20. Page 1225 has "simulataneously" instead of "simultaneously"
  21. Page 1231 twice has "implemenation" instead of "implementation" (second time is plural)
  22. Page 1461 has "signalling" instead of "signaling"
  23. Page 1523 has "intepreter" instead of "interpreter"
  24. Page 1617 has "Intepreter" instead of "Interpreter"
  25. Page 1626 has ActivityInstrumentationTestCase2[ActionBarFragmentActivity> instead of ActivityInstrumentationTestCase2<ActionBarFragmentActivity>
  26. Page 1663 has a redundant "this way" in the last paragraph
  27. Page 1675 says some things should happen when Build.DEBUG is true, when it is really done when Build.DEBUG is false
  28. Page 1676 has "enforcable" instead of "enforceable"
  29. Page 1734 has "Interent" instead of "Internet"
  30. Page 1871 has "earlir" instead of "earlier"
  31. Page 1884 has "collaspse" instead of "collapse"
  32. The Files/ReadWrite sample does not work on Android 4.2
  33. The Notification/Ordered sample app needs the VIBRATE permission, which is missing from its manifest.
  34. The "Some Words About Resources" chapter has "if the string value contains a quote (")" — in the APK edition, for some reason, the quotation mark inside the parentheses shows up blank
  35. Several places in the book have [> instead of <>
  36. Several places in the book have "there are a series" instead of "there is a series"

Version 4.4 (digital) - November 2012

  1. Page 24, in bullet #6, has "emalator" instead of "emulator"
  2. Page 197, in the last paragraph, has out of date text in the second-to-last sentence
  3. Page 254-6, the numbered paragraphs all have the number "1"
  4. Page 314, at the very bottom, has "such as in onCreate()", which should be "such as in onResume()"
  5. Page 322, the last sentence has "fragments" instead of "fragment's"
  6. Page 423 shows the wrong line of code in the second listing — it should be private static final String MODEL="model";
  7. Page 575, Tutorial #16 step #3, fails to show the source code for the DownloadCompleteReceiver for the non-Eclispe instructions
  8. Page 593 has a few source listings that show the wrong lines of code
  9. Page 610, Tutorial #17 step #1, fails to show the source code for the UpdateReceiver for the non-Eclispe instructions
  10. Page 610, Tutorial #17 step #1, fails to mention that you have to add the RECEIVE_BOOT_COMPLETED permission
  11. Page 682, Tutorial #19 step #1, we need to set android:layout_width, not android:layout_weight, to 0dp
  12. Page 844 refers to toggleSatellite(), which should be setSatellite()
  13. Page 878 has "which Android’s primary way", which should be "which is Android’s primary way"
  14. Page 927 has "container by rendered", which should be "container be rendered"
  15. Page 928 has "The... fragment... shrink", where "shrink" should be "shrinks"
  16. Page 928 has "and to take up", which should be "and takes up"
  17. Page 1011 has "fore example" instead of "for example"
  18. Page 1013 has "oura activity" instead of "our activity"

Version 4.3 (digital) - November 2012

  1. Page 239 points you to res/values/actions.xml instead of res/menu/actions.xml
  2. Page 451 fails to point out, to non-Eclipse developers, to add a string resource named settings with a value of Settings
  3. Page 919 has a LOCALINCLUDE macro for the book generator, which should have expanded into a source code listing for MainActivity.java
  4. Page 1033 indicates that an app widget is registered in the manifest as a <provider>, when it really is registered as a <receiver>
  5. Page 1769 has "close to experience of a desktop application" instead of "close to the experience of a desktop application"
  6. Page 1834 refers to DatePicker where it should refer to ExpandableListView

Version 4.2 (digital) - September 2012

  1. The APK file has 4.1 on the cover instead of 4.2
  2. Page 21 has an extraneous "it" in "you can bring up the AVD Manager it via the command"
  3. Page 83 has "a widget designed to allow you embed Web content", which should be "a widget designed to allow you to embed Web content"
  4. Page 99's Figure 45 has the wrong image
  5. Page 181 (and elsewhere) has "a" preceding a reference to an `android:...` property, instead of "an"
  6. Page 187, in the second paragraph, is missing a closing parenthesis
  7. Page 216 has "a regular Android projects", which should be just "regular Android projects"
  8. Page 281 has "suppling" instead of "supplying"
  9. Page 244, in the first numbered bullet, is missing a closing parenthesis
  10. Page 300 has "Fragment implementation ActionBarSherlock", which should be "Fragment implementation from ActionBarSherlock"
  11. Page 303 has "This is fragment-capable activity base class, which should be "This is the fragment-capable activity base class"
  12. Page 453 has "Introducting SQLite" instead of "Introducing SQLite"
  13. Page 471 has "the the" instead of just "the"
  14. Page 516 has "to to" instead of just "to"
  15. Page 518 has "is system boot process" instead of "its system boot process"
  16. Page 540 has a "later in this book" hyperlink towards the bottom that should link to "The Activity-Or-Notification Scenario" in the chapter on notifications, but instead has a bad link
  17. Page 566 has "idiosyncracies" instead of "idiosyncrasies"
  18. Page 590 has "poling period" instead of "polling period"
  19. Page 627 has "use use" instead of just "use"
  20. Page 677 has "very very" instead of just "very"
  21. Page 708 has the wrong code snippet at the bottom — it should be this file instead
  22. Page 714, in the second paragraph, twice has "a" instead of "an" (e.g., "a OnDateSetListener")
  23. Page 719 has "as as" instead of just "as"
  24. Page 722 has "Whenver" instead of "Whenever"
  25. Page 723 has "going in with respect" instead of "going on with respect"
  26. Page 726 has "separately layouts", which should be "separate layouts"
  27. Page 726 has a snippet of source at the bottom that looks like it is declaring a String data member, which should be String[][]
  28. Page 730 has "Recyling" instead of "Recycling"
  29. Page 731 has "largely the way it as before", which should be "largely the way it was before"
  30. Page 732 has "Have a style resources", which should be "Have a style resource"
  31. Page 757 has "on Android 3.0+ device", instead of "on an Android 3.0+ device"
  32. Page 759 has "what the trigger mechanism will bring up an action mode" instead of "what trigger mechanism will bring up an action mode"
  33. Page 763 has a botched source code listing (2nd on on page)
  34. Page 771 has "action mode samples demonstrates" instead of "action mode sample demonstrates"
  35. Page 785, in its only bullet, is missing a period after "whatever"
  36. Page 817 has "having everything the overlay" instead of "having everything in the overlay"
  37. Page 819 has a duplicate "really"
  38. Page 849 has "a item" instead of "an item"
  39. Page 906 has "a animation listener" instead of "an animation listener"
  40. Page 916 has "are only one" instead of "is only one"
  41. Page 971 has String[> where it should have String[]
  42. Page 1015 has "are are" instead of just "are"
  43. Page 1100 has "but their own characteristics" instead of "but also their own characteristics"
  44. Page 1152 has "are not know" instead of "are not known"
  45. Page 1225 has "aPackageManager`" instead of "a PackageManager" (with space, without rogue backtick)
  46. Page 1347 has "a regular Android projects", which should be just "regular Android projects"
  47. Page 1713 has "the the" instead of just "the"

Version 4.1 (digital) - August 2012

  1. Page 33 has "an digital book reader", which should be "a digital book reader"
  2. Page 60 has "go in an add one", which should be "go in and add one"
  3. Page 71 has res/values/strings/xml, which should be res/values/strings.xml
  4. Page 98 suggests that a code listing refers to LinearLayout, when in reality it refers to RelativeLayout
  5. Page 100, in the caption for Figure 46, has an errant + sign
  6. Page 108 has "will center the image the available" instead "will center the image in the available"
  7. Page 172 refers to an onListItemClick() method on OnItemClickListener; this should be onItemClick()
  8. Page 241 has "An custom action view" instead of "A custom action view"
  9. Page 242 indicates that configureActionItem() is called from onOptionsItemSelected(), when it really is called from onCreateOptionsMenu()
  10. Page 283, in bullet #4, has "due the user", which should be "due to the user"
  11. Page 555, in the first paragraph, refers to onCreate() and startPlayer() methods, where those should be onCreateView() and onClick(), respectively
  12. Page 560, in the second paragaph, has "returns to use", which should be "returns to us"
  13. Page 567 asks you to paste in code that does not exist in the book — just set up the manifest entry and skip ahead to Step #4, where the right source appears
  14. Page 587 has "in additional", which should be "in addition"
  15. Page 589 has "every day 24 hours", which should be "every 24 hours"
  16. Page 591 has "completed is system boot process", which should be "completed its system boot process"
  17. Page 592 refers to an OnBootCompleted class, which should be OnBootReceiver
  18. Page 604 has WakefulIntenService instead of WakefulIntentService
  19. Page 644 has an incorrect link to the EU4You project — it should link here
  20. Page 646 has "it simply display the" instead of "it simply displays the"
  21. Page 658 has "this indicates" leading off a sentence, without capitalizing the T
  22. Page 658 has "goes to those page" instead of "goes to this page"
  23. Page 667 has "one a time" instead of "one at a time"
  24. Page 678 has "taking a 'old features only' approach", which should be "taking an 'old features only' approach"
  25. Page 1081 in three places refers to getLastKnownPosition(), which should be getLastKnownLocation()

Version 4.0 (digital) - August 2012

  1. The cover on the APK editions shows Version 3.8 instead of Version 4.0
  2. Pages 26-28 have incorrect screenshots for Figures 9-11
  3. Page 93 has an extraneous "will give" in the first sentence of the last paragraph
  4. Page 150 has "select the hello string resource" — "hello" should be "hello_world"
  5. Page 193 and 195 have incorrect screenshots
  6. Page 238 has "supplied to use as" instead of "supplied to us as"
  7. Page 303 refers to setHasActionBar() where it should have setHasOptionsMenu()
  8. Page 345's Figure 144 has the wrong screenshot
  9. Page 351 refers to android:orientation where it should have android:screenOrientation
  10. Page 373, in the fourth paragraph, has "hae" where it should have "have"
  11. Page 448 is missing a period before the words "Version 1".
  12. Page 549 refers to startPlayer() where it should be onClick()
  13. Page 626, in the non-Eclipse instructions, indicates that you should create a file "with the content shown above", but there is no such content — just set up the manifest entry and skip ahead to Step #2, where the right source appears
  14. Page 658 has "does not matter, as we will not be using it, but the dialog requires it" twice
  15. Page 731 has the wrong code listing at the bottom of the page

Version 3.8 (digital) - July 2012

  1. There are many places in the book that refer to other chapters, particularly with language like "later in this book", that have not yet been converted to hyperlinks
  2. Most places that refer to generics (e.g., Foo<Bar>) have a square bracket instead of an angle bracket on the left
  3. The "Prerequisites" sections for the Data Distribution, SQLCipher, Loaders, and Content Provider chapters have an invalid link to the Database chapter.
  4. Page 18 has "Manger" where it should have "Manager"
  5. Page 33 has a link to the old GitHub repo -- it should be https://github.com/commonsguy/cw-omnibus
  6. Page 42's Figure 20 was not update for the output of the R20 tools
  7. Pages 183-193 (chapter on WebView) have a number of incorrect app screenshots
  8. Page 186 should have "http://commonsware.com" instead of "http://google.com" in the source code listing
  9. Page 211 has incorrect Eclipse instructions for adding ActionBarSherlock. Skip the second paragraph of Step #1 ("For the purposes..."). Instead, unpack the `library/` directory somewhere away from your Eclipse workspace (e.g., on your desktop).
  10. The images on pages 187 and 189 are incorrect
  11. Page 275 has "display simple content" where it should have "displaying simple content"
  12. Pages 404-5 have slightly out-of-date figures (Figures 145 and 146)
  13. Page 545 has an off-by-one line error in the code listing for the <service> element
  14. The last paragraph on page 551 has DownloadCheckService and DownloadInstallService reversed
  15. The last paragraph on page 552 should point out that these static data members should be defined on DownloadInstallService
  16. Page 582's code listing is for DownloadCompleteReceiver instead of UpdateReceiver
  17. Page 1102 has "AlarmManger" where it should have "AlarmManager"
  18. All copies of WebViewFragment — including those in the tutorials — have a flaw that causes them to break if you rotate the screen and zoom

Version 3.7 (digital) - November 2011

  1. Page 58 still thinks Android stopped with 3.0.
  2. The code listings on Pages 597-604 (the back half of the Maps chapter) are off kilter, grabbing the wrong lines out of the source files

Version 3.6 (digital) - March 2011

  1. The instructions in Chapter 3 for using Eclipse do not tell you to provide a name for your application, resulting in no caption for the icon in the launcher.
  2. In several places, there is a missing space after an ellipsis.
  3. Pages 33-34 are supposed to show an output listing from a run of ant clean install, but instead show output from ant clean debug.
  4. The fourth bullet on page 38 has "which hold", which should be "which holds".
  5. The URL to the ADT plugin for Eclipse on page 47 was word-wrapped at the hyphen — be careful if copying and pasting this value to remove any whitespace from the middle.
  6. In several places, "e.g.," is mangled in various ways.
  7. Page 96 has "Using android:layout_gravity on a widget (or calling setGravity() at runtime on the widget's Java object)" — the attribute should be android:gravity in this case.
  8. In two spots on page 282, "an receiver" appears where it should be "a receiver".
  9. In several places, style resource source code listings word-wrap in unfortunate spots.
  10. The code snippet at the top of page 336 is missing the 2nd opening parenthesis at the start of the if block and should be using SCREENLAYOUT_SIZE_MASK where the snippet has the first occurrence of SCREENLAYOUT_SIZE_LARGE.
  11. Page 342 shows fonts with sizes in dip, but they should be in px for the purposes of this particular example.
  12. Page 383 shows an implementation of onActivityCreated() that chains to the superclass implemenation of onCreate() instead of chaining to onActivityCreated().
  13. Page 406 has "We will examine this technique later in this book", with a link that points back to itself.
  14. Page 407 has "indicating than an", which should be "indicating that an".
  15. Page 409 has a reference to an ActionBarHC app, which should be ActionBarBC.
  16. Page 427, at the top, has "reflecting that there is no StrictMode in newer versions of Android", where "newer" should be "older".
  17. Page 449 has onLoadHeaders() where it should have onBuildHeaders().
  18. The second source listing on page 453 is off by two lines.
  19. Page 465 has, in one code sample, while (!result.moveToNext()), which should be while (result.moveToNext()).
  20. Page 546 has "on onCreate()", which should be "in onCreate()".
  21. Page 622 indicates that there is no Dalvik JIT compiler, when that has been added.
  22. Page 675 has ndroid:name where it should be android:name.
  23. Page 683 has android:package where it should be package:android.

Version 3.5 (digital) - February 2011

  1. The PDF bookmarks have an erroneous entry for the chapter bookmark for "Where Do We Go From Here?".
  2. Page 97 indicates that you have to set margins on a per-side basis — this is incorrect, as you can use android:layout_margin to affect all four sides at once.
  3. Page 118 indicates that ListView is covered in Chapter 11, when it really is now covered in Chapter 12.
  4. Page 120 has "in a pipe-delimited", which should be "in a pipe-delimited list".
  5. Page 172 has "each let you provide a callback object" — "let" should be "lets".
  6. Page 212 has "option menus" where it should have "options menus".
  7. Page 215 has "a ordinary", which should be "an ordinary".
  8. Page 221 has "option menus" where it should have "options menus".
  9. Page 270 has "One way to deal with this is to disable the destroy-and-create cycle is to take over configuration changes, as described in another section.", which is grammatically flawed.
  10. Page 270 has some rogue spaces before the period in "This project uses a ProgressBar, much like the Handler demo from earlier in this chapter."
  11. In several places, such as pages 275-6, there is a missing space after an ellipsis.
  12. In several places, such as page 275, onRetainNonConfiguration should be replaced with onRetainNonConfigurationInstance().
  13. Page 276 has "there are a wide range", which should be "there is a wide range".
  14. In several places, such as page 595, a dimension in the prose will be referred to in px where the accompanying source code listing has the dimension in dip.
  15. Page 619 refers to "Android 2.2 will start to become a bit more prevalent in the next few months", which is clearly out of date.
  16. Page 629 has the wrong code snippet.
  17. Page 632 has "On StackOverflow, make sure you source code", which should be "On StackOverflow, make sure your source code".

Version 3.4 (digital) - January 2011

  1. All occurrences of "et. al." should be "et al." instead.
  2. All occurrences of "vis a vis" should be "vis-à-vis" instead.
  3. Page 2 has "their phone" where it should have "their phones".
  4. Page 13 is missing the word "take" from "unpacking it will take a fair bit of time".
  5. Page 45 has "via a add-in" where it should be "via an add-in".
  6. The Maps chapter has the "Rugged Terrain" section twice.
  7. Page 470 refers to com.google.android.widget where it should simply be android.widget.
  8. Page 472 refers to getMapController(), which should be getController().

Version 3.3 (digital) - November 2010

  1. All occurrences of "vis a vis" should be "vis-à-vis" instead.
  2. The license cited for the Four-to-Free Guarantee has an erroneous space between "Share" and "Alike".
  3. The EPUB and Kindle books are missing sub-bullets under "Controls the focus sequence:" in Chapter 5.
  4. All references to CheckAdapter (e.g., page 115) should refer to RatingAdapter.
  5. Page 126 has "The SeekBar in an input widget", which should be "The SeekBar is an input widget".
  6. Page 171 has "In the layout XML shown above, the other_stuff group is initially invisible. If we make it visible in our Java code, the two menu items in the group will "magically" appear." This prose was for an older example and is no longer applicable to the current example.
  7. Both sample projects in the Menus chapter have super.onOptionsItemSelected() in places where they should have super.onContextItemSelected().
  8. Page 216 has y0u (with a zero) instead of you (with an o) in the third paragraph of the "...But Google Does Not Recommend This" section.
  9. Page 240, in two places, has getNonConfigurationInstance() instead of getLastNonConfigurationInstance()
  10. Page 271 refers to a Close button that no longer exists in that sample.
  11. Many examples show the use of makeText() on Toast, where the last parameter is a number (2000, 4000, or 5000). That should be either Toast.LENGTH_SHORT or Toast.LENGTH_LONG.

Version 3.2 (digital) - October 2010

  1. All occurrences of "vis a vis" should be "vis-à-vis" instead.
  2. The Table of Contents has some bad links (e.g., "...And Not a Drop to Drink" leads nowhere when clicked) and some out of sync page numbers.
  3. In the second paragraph of page 68, the two example bits of code are reversed.
  4. Page 217 has a section, "Spinning a Thread", that should not be there, as it was moved to a later spot in the book.
  5. Many examples show the use of makeText() on Toast, where the last parameter is a number (2000, 4000, or 5000). That should be either Toast.LENGTH_SHORT or Toast.LENGTH_LONG.

Version 3.1 (digital) - June 2010

  1. The Table of Contents entry for "...And Checking It Twice" links to the wrong page.
  2. Pages 9-10 suggest that the android create project command will create a tests/ directory, when it does not.
  3. The last line of code on page 23 has --package com.commonsware.android.now where it should have --package com.commonsware.android.skeleton
  4. The last sentence of the first paragraph of page 32 is missing the last four words, "later in this chapter".
  5. Page 51 refers to an "accessor" where it should refer to a "setter".
  6. Page 90 has "a XML" where it should have "an XML".
  7. The first paragraph of page 92 has android:verticalSpacing="35" where it should have android:verticalSpacing="35px".
  8. The list of callbacks on page 95 missed afterTextChanged().
  9. Page 219 has "more important that others", which should be "more important than others".
  10. Page 220 has an extraneous space at the end of the third bullet.
  11. Page 276 refers to a Files/Static sample application as if that had been covered before, but that sample does not appear until page 321.
  12. Page 290 refers to PreferencesManager where it should have PreferenceManager.
  13. Page 314 has the parameters to query() slightly out of order in the bulleted list. The "having" clause should appear before the "order by" clause in the last two parameters.
  14. Page 504 has a link to the Android Open Source Project, but after that site was reorganized, the link no longer works. Here is the proper link.
  15. The WeatherPlusService sample has a flawed bit of synchronization -- FetchForecastTask should use synchronized(WeatherPlusService.this) instead of synchronized(this).

Version 3.0 (digital) - February 2010

  1. Page 23 has com.commonsware.android.Now where it should have com.commonsware.android.now (lowercase n).
  2. Page 25 has android.Activity where it should have android.app.Activity.
  3. Page 60 implies that we do our if() test on the supplied RadioGroup. In the code, though, we switch on the supplied radio button ID.
  4. Page 125 has a code sample that shows calling getLayoutInflater() on a Context. That is incorrect. For an inner class of Activity, just call getLayoutInflater() directly, to reach the Activity's own implementation.
  5. Page 211 says that we sleep for a quarter-second to simulate real work, but the code snippet above shows the delay is 200 milliseconds.
  6. The chapter on Notifications fails to mention that you need Notification.FLAG_SHOW_LIGHTS in your flags in order to use the LEDs.
  7. The code snippet on Page 310 is missing the second parameter in the call to rawQuery(), which should be null.
  8. Page 362 has "An optional feature your content provider to its clients", which should be "An optional feature your content provider may offer to its clients".

Version 2.9 (digital) - January 2010

  1. Pages 41 and 66 have "definining" where they should have "defining".
  2. Page 67 has "Next, we define the label, which is fairly basic, except for its own 15-pixel padding (android:padding = "15px")." — the attribute should be android:paddingTop.
  3. Page 142 has "straight-foward" where it should have "straight-forward".
  4. Pages 224 and 263 reference activityCreator, which has been replaced with android create project.
  5. Page 293 has an incorrect screenshot, showing "Simple Preferences" for a heading when it should be "Other Preferences".
  6. Page 302 has "CosntantsBrowser" where it should have "ConstantsBrowser".
  7. Page 374 has "explictly" where it should have "explicitly".
  8. Page 380 has "handes" where it should have "handles".
  9. Page 395 has "Critieria" where it should have "Criteria".
  10. Pages 469 and 472 have "idiosyncracies" where they should have "idiosyncrasies".
  11. Page 473 has "stylii" where it should have "styli".
  12. Page 473 has "ANRDROID_ID" where it should have "ANDROID_ID".

Version 2.8 (digital) - November 2009

  1. Page 14 has "These are called br9adcast receivers", which should be "These are called broadcast receivers". The author is sufficiently mortified.
  2. Page 15 shows the use of a minSdkVersion attribute in a code sample, but it leaves off the android: namespace prefix.
  3. Page 20 has "There should be a new values", which should be "There should be a new value".
  4. Pages 109-111 demonstrate a technique for using new editions of getTag() and setTag() to get some of the value of a holder/wrapper class without needing a custom class. It has been pointed out that this technique, while works, may suffer from performance issues on larger lists.
  5. Page 136 has "Note that the TabWidget and FrameLayout are immediate children of the TabHost", which is no longer true as of this version of the book.
  6. Page 210 claims that onPostExecute() takes a varargs parameter, when it does not &mdash it only takes a single value of the third generic data type.
  7. Page 224 has "add an receiver" where it should have "add a receiver".
  8. Page 267 has "such a widget's padding" where it should have "such as a widget's padding".
  9. Page 326 has "Beyond that, though, there the Android Scripting Environment (ASE)", which should be "Beyond that, though, there is the Android Scripting Environment (ASE)".
  10. Page 356 has "An optional feature your content provider to its clients", which should be "An optional feature your content provider may offer to its clients".
  11. Page 359 has "or a once at install time", which should be "or all at once at install time".
  12. Page 374 has "To start a service, on approach is", which should be "To start a service, one approach is".
  13. Page 374 has "if its your own service", which should be "if it's your own service".
  14. Page 381 has "where you supply an PendingIntent", which should be "where you supply a PendingIntent".
  15. Page 390 has "You will also a permission in your application", which should be "You will also need a permission in your application".
  16. Page 402 has "remember to multiple the", which should be "remember to multiply the".
  17. Page 402 has "offers toggleSatellite(), which, as the names suggest, toggle", which should be "offers toggleSatellite(), which, as the name suggests, toggles".
  18. Page 415 has "navigate to spot", which should be "navigate to the spot".
  19. Page 448 has "to see what your application looks on different devices", which should be "to see what your application looks like on different devices".
  20. The code sample spanning pages 457-8 is a duplicate of a previous code sample. This one should have android:textSize="5mm"
  21. Page 467 has "Ther are few", that should be "There are few".
  22. Page 469 indicates that the ARCHOS 5 Android tablet lacks GPS — this is incorrect. It does, however, lack Google Maps as of the time of this writing.

Version 2.1 (digital) - July 2009

  1. Page 16 twice erroneously refers to android:versionCode as android:versionNumber
  2. Page 24 has "the directory where you wan the skeleton", where it should have, "the directory where you want the skeleton"
  3. Page 24 also has the wrong package name for the android create project example. The package should be com.commonsware.android.skeleton.
  4. Page 26 references android.Activity where it should have android.app.Activity.
  5. Page 27 references using tools/emulator to launch the emulator, which is still true, but you need to provide an -avd switch to name the AVD you wish to use. For more on AVDs, see the Getting Going chapter, earlier in the book.
  6. The first bullet on page 66 has android:layout_toRight where it should have android:layout_toRightOf
  7. Page 79, towards the top, has "...widgets, in turn, will be shown the list or spinner...", which should be "...widgets, in turn, will be shown in the list or spinner..." (emphasis added).
  8. Page 124 indicates that newView() should call bindView(). Actually, CursorAdapter and subclasses do that for you, so newViw() should just return the empty row — bindView() will then be called automatically.
  9. Page 130 includes the phrase "All you need to do it put them", where it should be "All you need to do is put them"
  10. Page 211 says that the doInBackground() sleeps for "a quarter-second", when it actually sleeps for 200ms.
  11. Page 212 claims that onPostExecute() takes a varargs parameter, when it does not &mdash it only takes a single value of the third generic data type.
  12. Page 230 has RESULT_CANCELLED where it should have RESULT_CANCELED.
  13. Page 252 has R.layout.another_field in a code sample, where it should be R.id.another_field
  14. The example at the bottom of Page 252, and the example at the top of Page 257, both have a redundant xmlns:android declaration.
  15. Page 271, in the third paragraph, has "and how to use it in other environment than Android", which should be "and how to use it in an environment other than Android"
  16. Page 294, in the third paragraph, refers to a "representation of the request body", where it should have "representation of the response body"
  17. The first sentence of page 312 should be "This chapter covers the first scenario; the second is covered in The Busy Coder's Guide to Advanced Android Development"
  18. Page 346, in the first paragraph, refers to getContentProvider(), which should be getContentResolver().
  19. Page 360 has the phrase "means that observer that initiated", which should be "means that the observer that initiated"
  20. Page 406 refers to a screenshot that is not in this edition of the book.
  21. Page 410 has the old paths for the debug keystore locations in Windows. Please refer to the Maps API documentation for the correct locations.

Version 2.0 (print) - January 2009

If you are trying to use this book with the Android 1.5 SDK, please be advised that this book was written many months before that SDK's release, and so the technology has shifted. You may wish to trade in your print book for a Warescription, so you can get updates that more closely track Android itself.

  1. Page 245 has the phrase "in that the break down the SQL statements", which should be "in that they break down the SQL statements"
  2. Page 336 has the phrase "means that observer that initiated", which should be "means that the observer that initiated"

Version 2.0 (digital) - January 2009

  1. Page 113, near the bottom, says "we need to add a checkbox", where it should say, "we need to add a RatingBar"
  2. Page 194 has "amd" in the first full paragraph instead of "and".
  3. The prose around the sample on Page 242 refers to one statement to create the table and a second statement to create an index. The code sample only shows one statement, because the source of the statement (Provider.java in ContentProvider/Constants) does not create an index.
  4. On page 243, in the third paragraph, "in that the break down" should be "in that they break down".
  5. Page 245, just before the example snippet, compares this snippet to the previous snippet (on page 244) — the two snippets are actually unrelated.
  6. Page 274, and perhaps other places, refer to BroadcastReceiver as being an interface. In reality, it is an abstract class.
  7. On page 334, the text shown in bold is missing: "An optional feature your content provider might offer to its clients is notify-on-change support. This means that your content provider will let clients know if the data for a given content Uri changes."
  8. Page 368 cites a number of permissions needed for developing location-aware applications, but most of those permissions are obsolete. The two main permissions you may need are ACCESS_FINE_LOCATION (for GPS) or ACCESS_COARSE_LOCATION.
  9. Page 372 cited "previous" source code — in reality, it is referring to the Weather and WeatherPlus sample applications.
  10. Links throughout the book to the Building 'Droids column on AndroidGuys.com have the incorrect URL.

Version 1.9 - Early December 2008

  1. On page 140, the book indicates that onCreateOptionsMenu() is called each time a menu is displayed. This is incorrect — it is only called once. However, onPrepareOptionsMenu() is called just before displaying the menu each time it is requested by the user.
  2. On page 142, the book indicates that you can only get the ContextMenuInfo menuInfo in onCreateContextMenu(). In reality, you can also get this by calling getMenuInfo() on the MenuItem passed into onContextItemSelected().
  3. Page 180 refers to runOnUIThread(), which should be runOnUiThread().
  4. The example array resource on page 231 is very wrong.
  5. On page 285, the third full paragraph ("The intent filter also...") should be deleted.
  6. Page 312 refers to android.provider.CONTENT_URI, which should be android.provider.Contacts.CONTENT_URI.

Plus many others too numerous to mention — just download Version 2.0.2!

Version 1.4 - Early November 2008

  1. On page 96, the book refers to contentView where it should refer to convertView.
  2. On page 121, the book refers to a "later chapter" about threads but fails to provide a hyperlink.
  3. On page 135, the book's source code has the flip interval set at 2 seconds (2000 milliseconds), but the prose later incorrectly says the flip interval is 1.5 seconds.
  4. On page 137, please ignore the backslash that accidentally was added at the end of the page.
  5. On page 146, the prose refers to four menu choices, when (in this version of the sample) there are actually seven.
  6. On page 150, the sentence "For example, from the Inflation sample project, here is menu called sample.xml:" is missing the word "a" between "is" and "menu".
  7. Page 238 is missing two words — the phrase "one in and one in for use in landscape mode" should be "one in portrait mode and one in for use in landscape mode".
  8. Page 259 shows a sample path to a SQLite database on the phone, but includes the .db extension. This extension is not added by default when creating a database in Android, so it is more likely that your database will not have any extension.
  9. The last paragraph on page 302 is missing the word "than" at the end of the phrase "but by means other".
  10. Page 338 refers to Parcelable with a "(see below)" note, but there is no additional material on that interface.

Version 1.3 - Late September 2008

  1. Page 25's second paragraph should read: "With that in mind, it's time to break out the XML and learn how to lay out Android activity views that way."
  2. Page 41 is missing a verb — the end of the last sentence of the first paragraph of "The Activity" should read "which is where your first activity will go."
  3. Page 60 has three bullets, the second and third of which are repeated. The third should actually be android:layout_witdh="fill_parent".
  4. Page 76 indicates that the Spinner choices can be selected via clicking on the left and right D-pad buttons. This is no longer the case — the only way to choose an item from the spinner is to activate it (e.g., click the center D-pad button) and choose an option from the dialog.
  5. Pages 80-81 show horizontalSpacing and columnWidth values as pure numbers, when they should be dimensions (e.g., 100px).
  6. On pages 93, 128, and 397, ViewInflate should be changed to LayoutInflater.
  7. On Page 107, the screenshot is incorrect, probably taken from the subsequent example. The screenshot should show the three-starred item with an all-caps label.
  8. The third line of Page 122 shows a 0 that is not in monospace font, and so may appear to look like an O.
  9. Pages 174 and 396 refer to an obsolete UIThreadUtilities class.
  10. On page 213, the sample code for the ReadWriteFileDemo is cut off. If you wish to see the full listing, the easiest solution is to download the source code.
  11. On page 229, where it says Resources.getColor(R.dimen.forest_green), it should really say Resources.getColor(R.color.forest_green).
  12. On pages 275, 281, and 402, startSubActivity() should be changed to startActivityForResult().
  13. On pages 275, 318, and 398, broadcastIntent() should be changed to sendBroadcast().
  14. Page 287 uses ALTERNATE_CATEGORY and ALTERNATIVE_CATEGORY instead of CATEGORY_ALTERNATIVE, while page 288 uses DEFAULT_CATEGORY instead of CATEGORY_DEFAULT./li>
  15. The Pick sample application (in the Introspection chapter) indicates that it needs special permissions to be able to pick contacts &mdash this is not the case with Android 1.0r1.

Version 1.2 - September 2008

See problem #3 from Version 1.0. Also:

  1. On page 7, where it says there are "five key items", it should be "seven key items"
  2. In the chapter on Maps, in the "Drawing the ItemizedOverlay" section, the "fourth bullet" should actually be the "last bullet"
  3. On page 12, the second paragraph refers to com.commonsware.android where it should refer to com.commonsware.android.search to line up with the example shown at the top of the page
  4. On page 42, the first bullet refers to R.id.rb1 — this is not referencing the example shown below it, but rather just an arbitrary possible radio button ID
  5. On page 60, the second paragraph refers to 16 in two places where it should be 15.
  6. On page 223, the bulleted list of parameters to query() is missing the HAVING parameter.
  7. On page 225, count() should be getCount(), first() should be moveToFirst(), next() should be moveToNext(). Also, the code example is missing result.moveToFirst(); between the query and the while loop to get the Cursor properly positioned, and it to has an erroneous next() that should be moveToNext().

Version 1.1 - August 2008

See problems #1-3 below

Version 1.0 - July 2008

  1. On page 26-27, the "And We Attach These To Java...How?" section references a fictitious snicklefritz.xml — this name has no relevance to any example in this chapter. It's just a name.
  2. On page 106, the text refers to the example setting the background color of the list to the selected hue. The example was rewritten to change divider thickness instead of background color, but we forgot to change the one mention of the background color.
  3. In various places in the book, the EditText class is incorrectly referred to as EditView.

Version 0.9 - June 2008

The Kindle, and to a lesser extent the PDF, have some problems with formatting of source code in the examples. If you cannot read the source code in the ebook, download the source separately. This is also useful if you would like to compile and run any of the samples.