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 5.4 (digital) - December 2013
- Page 1032 is missing the word "in" from "From there, you can use @drawable/thing or R.drawable.thing in the same places that you would use any other drawable resource"
- Page 1286 has "their" instead of "there"
- Page 1665 has "create an use" instead of "create and use"
Version 5.3 (digital) - November 2013
- Pages 4-5 have Figures 1 and 2, which are seriously (and strangely) degraded
- Page 375 shows an onRestoreInstanceState() method that does not chain to the superclass implementation of onRestoreInstanceState(), though it should
- Page 540 unexpectedly has "expectated" rather than "expected"
- Page 881 has "if if", which is redundant and repetitive
- Page 882 is missing the "other" from "let alone other words not beginning with m"
- Page 977 has an unnecessary "either" in "Otherwise, either some other marker’s info window is shown"
- Page 978 has an unnecessary "of use" in "by use of use of an image fetching-and-caching library"
- Page 980 has "more complicated that" instead of "more complicated than"
- Page 981 has "an HashMap" instead of "a HashMap"
- Page 1307 has "somtimes" instead of "sometimes"
- Page 2051 is missing the "a" in "An Anroid test project is a complete set..."
- Page 2089 has "ADT plug" instead of "ADT plugin"
Version 5.2 (digital) - October 2013
- Page 316 indicates that fragments support onRestart(), which is incorrect
- Page 538's link to TrustManagers.java should be linking to here
- Page 570 has "scan though" instead of "scan through"
- Page 665 refers to a scheduleAlarms() method, where it should be scheduleAlarm()
- Page 774 and page 2251 each have "an StackOverflowError" instead of "a StackOverflowError"
- The second code listing on page 834 is one line too long
- The first line of page 991 has a malformed link, which should be to http://googlemaps.github.io/android-maps-utils/
- Page 1765 has "adminstration" instead of "administration"
- Page 2038 has "So, need to find the entry", instead of "So, we need to find the entry"
- Page 2051 has "Understanding this chapter requires that you have the chapter" instead of "Understanding this chapter requires that you have read the chapter"
- Page 2064 has "will explored" instead of "will be explored"
- Page 2166 has "primarily limitation" instead of "primary limitation"
- Page 2277 and 2280 each have "y0u" instead of "you"
- Page 2354 has "as the behest" instead of "at the behest"
Version 5.1 (digital) - September 2013
- Page 452, in the first full paragraph, has an obsolete sentence at the end ("In this sample code...")
- Page 557 has "require is to name" instead of "require us to name"
- Page 868, in the last paragraph, has "This mens that there is", which should be "This means that there is"
- Page 1311 has "will necessary send" instead of "will necessarily send"
- Page 1311 has "while the emulator’s home screen for Android 4.1 broadcast APPWIDGET_OPTIONS_CHANGED" instead of "while the emulator’s home screen for Android 4.1 broadcasts APPWIDGET_OPTIONS_CHANGED"
- Page 1451 has "construct an Intent", which should be "constructs an Intent"
Version 5.0 (digital) - July 2013
- Page numbering of the PDF file does not match the "printed" page number, starting with page 2
- Page 72 has a broken link to CyanogenMod's roster of udev rules, which should be pointing to this page
- Page 428 refers to "Package Manager" in Eclipse, which should be "Package Explorer"
- Page 444 has an incorrect screenshot, as the Ringtone value should be "unset"
- Page 580 indicates that the first source code listing should be one line, when in reality it is an entire method
- Page 1125 shows a custom DialogPreference that, somehow, is missing its Set and Cancel buttons
- Page 1125 indicates that pressing BACK from the custom DialogPreference saves the change, when that only happens if you click on the (missing) Set button
- Page 1435 has "Launches MainAcitivity...", which should be "Launch MainActivity" for parallelism with the remaining bullets
- Page 1502 has three occurrences of byte[>, which should really be byte<>, and will actually be replaced by the words "byte array"
- Page 1531 has "registers an PendingIntent", which should be "registers a PendingIntent"
Version 4.9 (digital) - June 2013
- Page 230, in the last sentence of the first full paragraph, is missing the "Y" in "You"
- Page 334 indicates that you cannot have fragments inside of other fragments, which is incorrect, as this is now possible
- Page 363 has "the author of this book though this", which should be "the author of this book thought this"
- Page 496 has "transaction in on onCreate()", which should just be "transaction in onCreate()"
- Page 695 refers to a CountryListener that was refactored to be CountriesFragment.Contract
- Page 695 cites CountriesFragment as being retained, and it is not
- Page 708 refers to a strip on the left, where that strip would actually appear on the right
- Page 881 has "Maps V2 does not in", which should be "Maps V2 support does not exist in"
- Page 1075 refers to a getColor() method on AttributeSet, which should be getInt()
- Page 1151 has "we exploring" instead of "we explored"
- Page 1152 refers to res/values/main.xml, which should be res/layout/main.xml
- Page 1167 has "action bar item add a new page", which should b "action bar item will add a new page"
- Page 1181's second code listing is off by a couple of lines
- Page 1607 has a broken attempt to write m/s2
- Page 2068 has a broken link to PhoneGap feature table
Version 4.8 (digital) - May 2013
- Page 383 refers to AddStringsTask, which should be AddStringTask
- Page 618 is missing a period after the first sentence of the "Archetype: Scheduled Service Polling" section
- Page 692 has FragmenManager, which should be FragmentManager
- Page 702 indicates that fragments cannot be included inside other fragments, which is not true for Android 4.2+ or the Android Support package
- Page 735 is missing the content for the "Getting Your News Fix" section
- Pages 800-801, in three captions, refer to TabFragmentDemo as TabFragmentsDemo
- Page 871, and all the Maps V2 samples, are missing the ACCESS_NETWORK_STATE permission, which is occasionally needed
- Page 901 has the wrong code in first code snippet
- Page 1135 has "we exploring" instead of "we explored"
- Page 1208 has "and cause cause excessive", which should be "and can cause excessive"
- Page 1133 has an unexpanded "LOCALINCLUDE" macro, which should be showing the contents of the project's MainActivity.java file
- Page 1342 has "no matter how the enter the app" instead of "no matter how they enter the app"
- Page 1342, in the 5th paragraph, has "eclipse.ini" running right into "file" without an intervening space
Version 4.7 (digital) - March 2013
- Page 15 has "a emulator" instead of "an emulator" in the last paragraph
- Page 49 has "e.g,." instead of "e.g.,"
- Page 68 has "an resource" instead of "a resource"
- Page 137, in the second paragraph, indicates that LinearLayout is covered in this chapter; it was actually covered in the preceding chapter
- 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)
- 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"
- Page 1141 has "want do deliver" instead of "want to deliver"
- Page 1240 has some unexpanded LOCALINCLUDE macros
- Page 1262 has "cases where is" instead of "cases where it is"
Version 4.6 (digital) - February 2013
- Page 193, Figure 106, references a DynamicDemo project, whose name is merely Dynamic
- Page 258 refers to an "Add:" TextView, which is actually a "Word:" TextView
- Page 527 has "help the user install it if is not" instead of "help the user install it if it is not"
- Page 541 has "The OnBootCompleted BroadcastReceiver", which should just be "OnBootReceiver"
- Page 872 has a link to the section on Traceview that does not work
- Page 1165 has "corresponding column name" instead of "corresponding column names"
- Pages 1167-1169 have code listings that have extra lines or are missing lines
- Page 1281 has "occurrs" instead of "occurs"
- Page 1345 has Object[> instead of Object and byte[> instead of byte
- Page 1356 has byte[> instead of byte
- Page 1551 has an incorrect screenshot (Figure 414)
- Page 1561 shows EXTRA_EMAIL as being a string, when it should be a string array
- Page 1571's third paragraph should be linking to the chapter on JARs and library projects, instead of having those rogue brackets and such
- Page 1574 twice has int[> instead of int
- Page 1815 has char [> instead of char
- Tutorial #13, when adding the Preferences activity, you will need to add @TargetApi(Build.VERSION_CODES.HONEYCOMB) to the onBuildHeaders() method
- Tutorial #17 does not correctly show converting the services to WakefulIntentService
Version 4.5 (digital) - January 2013
- 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"
- 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
- Page 233 has "to help explain what an action bar it", which should be "to help explain what an action bar is"
- Page 241 has "what you would ordinary need", which should be "what you would ordinarily need"
- Page 346 is missing the last line of its first code listing — please add android:visibility="gone"/>
- Page 495 refers to NotesActivity, which should be NoteActivity
- Page 505, in the second block of code, is missing the return(result); statement and closing brace
- Page 567 has an extraneous android:onClick attribute in the first code block
- Page 844, the caption for figure 258 has "Referencd" instead of "Referenced"
- Page 874 has "drawn over top lines with", which should be "drawn over the top of lines with"
- Page 944 has "drawable to 50% the height", which should be "drawable to 50% of the height"
- Page 1005 has "the will not be clicked" instead of "they will not be clicked"
- Page 1046 has "defintion" instead of "definition"
- Page 1083 has the wrong code listing -- the correct code can be found in the GitHub repo
- 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+
- Page 1130 has RemoteViewService instead of RemoteViewsService
- Page 1139 and 1140 have the wrong images for Figure 354 and 355
- Page 1145 references a non-existent addId() method on Uri
- Page 1152 (and a few other spots in this chapter) have String[> instead of String
- Page 1225 has "simulataneously" instead of "simultaneously"
- Page 1231 twice has "implemenation" instead of "implementation" (second time is plural)
- Page 1461 has "signalling" instead of "signaling"
- Page 1523 has "intepreter" instead of "interpreter"
- Page 1617 has "Intepreter" instead of "Interpreter"
- Page 1626 has ActivityInstrumentationTestCase2[ActionBarFragmentActivity> instead of ActivityInstrumentationTestCase2<ActionBarFragmentActivity>
- Page 1663 has a redundant "this way" in the last paragraph
- Page 1675 says some things should happen when Build.DEBUG is true, when it is really done when Build.DEBUG is false
- Page 1676 has "enforcable" instead of "enforceable"
- Page 1734 has "Interent" instead of "Internet"
- Page 1871 has "earlir" instead of "earlier"
- Page 1884 has "collaspse" instead of "collapse"
- The Files/ReadWrite sample does not work on Android 4.2
- The Notification/Ordered sample app needs the VIBRATE permission, which is missing from its manifest.
- 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
- Several places in the book have [> instead of <>
- Several places in the book have "there are a series" instead of "there is a series"
Version 4.4 (digital) - November 2012
- Page 24, in bullet #6, has "emalator" instead of "emulator"
- Page 197, in the last paragraph, has out of date text in the second-to-last sentence
- Page 254-6, the numbered paragraphs all have the number "1"
- Page 314, at the very bottom, has "such as in onCreate()", which should be "such as in onResume()"
- Page 322, the last sentence has "fragments" instead of "fragment's"
- Page 423 shows the wrong line of code in the second listing — it should be private static final String MODEL="model";
- Page 575, Tutorial #16 step #3, fails to show the source code for the DownloadCompleteReceiver for the non-Eclispe instructions
- Page 593 has a few source listings that show the wrong lines of code
- Page 610, Tutorial #17 step #1, fails to show the source code for the UpdateReceiver for the non-Eclispe instructions
- Page 610, Tutorial #17 step #1, fails to mention that you have to add the RECEIVE_BOOT_COMPLETED permission
- Page 682, Tutorial #19 step #1, we need to set android:layout_width, not android:layout_weight, to 0dp
- Page 844 refers to toggleSatellite(), which should be setSatellite()
- Page 878 has "which Android’s primary way", which should be "which is Android’s primary way"
- Page 927 has "container by rendered", which should be "container be rendered"
- Page 928 has "The... fragment... shrink", where "shrink" should be "shrinks"
- Page 928 has "and to take up", which should be "and takes up"
- Page 1011 has "fore example" instead of "for example"
- Page 1013 has "oura activity" instead of "our activity"
Version 4.3 (digital) - November 2012
- Page 239 points you to res/values/actions.xml instead of res/menu/actions.xml
- Page 451 fails to point out, to non-Eclipse developers, to add a string resource named settings with a value of Settings
- Page 919 has a LOCALINCLUDE macro for the book generator, which should have expanded into a source code listing for MainActivity.java
- Page 1033 indicates that an app widget is registered in the manifest as a <provider>, when it really is registered as a <receiver>
- Page 1769 has "close to experience of a desktop application" instead of "close to the experience of a desktop application"
- Page 1834 refers to DatePicker where it should refer to ExpandableListView
Version 4.2 (digital) - September 2012
- The APK file has 4.1 on the cover instead of 4.2
- Page 21 has an extraneous "it" in "you can bring up the AVD Manager it via the command"
- 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"
- Page 99's Figure 45 has the wrong image
- Page 181 (and elsewhere) has "a" preceding a reference to an `android:...` property, instead of "an"
- Page 187, in the second paragraph, is missing a closing parenthesis
- Page 216 has "a regular Android projects", which should be just "regular Android projects"
- Page 281 has "suppling" instead of "supplying"
- Page 244, in the first numbered bullet, is missing a closing parenthesis
- Page 300 has "Fragment implementation ActionBarSherlock", which should be "Fragment implementation from ActionBarSherlock"
- Page 303 has "This is fragment-capable activity base class, which should be "This is the fragment-capable activity base class"
- Page 453 has "Introducting SQLite" instead of "Introducing SQLite"
- Page 471 has "the the" instead of just "the"
- Page 516 has "to to" instead of just "to"
- Page 518 has "is system boot process" instead of "its system boot process"
- 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
- Page 566 has "idiosyncracies" instead of "idiosyncrasies"
- Page 590 has "poling period" instead of "polling period"
- Page 627 has "use use" instead of just "use"
- Page 677 has "very very" instead of just "very"
- Page 708 has the wrong code snippet at the bottom — it should be this file instead
- Page 714, in the second paragraph, twice has "a" instead of "an" (e.g., "a OnDateSetListener")
- Page 719 has "as as" instead of just "as"
- Page 722 has "Whenver" instead of "Whenever"
- Page 723 has "going in with respect" instead of "going on with respect"
- Page 726 has "separately layouts", which should be "separate layouts"
- Page 726 has a snippet of source at the bottom that looks like it is declaring a String data member, which should be String
- Page 730 has "Recyling" instead of "Recycling"
- Page 731 has "largely the way it as before", which should be "largely the way it was before"
- Page 732 has "Have a style resources", which should be "Have a style resource"
- Page 757 has "on Android 3.0+ device", instead of "on an Android 3.0+ device"
- Page 759 has "what the trigger mechanism will bring up an action mode" instead of "what trigger mechanism will bring up an action mode"
- Page 763 has a botched source code listing (2nd on on page)
- Page 771 has "action mode samples demonstrates" instead of "action mode sample demonstrates"
- Page 785, in its only bullet, is missing a period after "whatever"
- Page 817 has "having everything the overlay" instead of "having everything in the overlay"
- Page 819 has a duplicate "really"
- Page 849 has "a item" instead of "an item"
- Page 906 has "a animation listener" instead of "an animation listener"
- Page 916 has "are only one" instead of "is only one"
- Page 971 has String[> where it should have String
- Page 1015 has "are are" instead of just "are"
- Page 1100 has "but their own characteristics" instead of "but also their own characteristics"
- Page 1152 has "are not know" instead of "are not known"
- Page 1225 has "aPackageManager`" instead of "a PackageManager" (with space, without rogue backtick)
- Page 1347 has "a regular Android projects", which should be just "regular Android projects"
- Page 1713 has "the the" instead of just "the"
Version 4.1 (digital) - August 2012
- Page 33 has "an digital book reader", which should be "a digital book reader"
- Page 60 has "go in an add one", which should be "go in and add one"
- Page 71 has res/values/strings/xml, which should be res/values/strings.xml
- Page 98 suggests that a code listing refers to LinearLayout, when in reality it refers to RelativeLayout
- Page 100, in the caption for Figure 46, has an errant + sign
- Page 108 has "will center the image the available" instead "will center the image in the available"
- Page 172 refers to an onListItemClick() method on OnItemClickListener; this should be onItemClick()
- Page 241 has "An custom action view" instead of "A custom action view"
- Page 242 indicates that configureActionItem() is called from onOptionsItemSelected(), when it really is called from onCreateOptionsMenu()
- Page 283, in bullet #4, has "due the user", which should be "due to the user"
- Page 555, in the first paragraph, refers to onCreate() and startPlayer() methods, where those should be onCreateView() and onClick(), respectively
- Page 560, in the second paragaph, has "returns to use", which should be "returns to us"
- 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
- Page 587 has "in additional", which should be "in addition"
- Page 589 has "every day 24 hours", which should be "every 24 hours"
- Page 591 has "completed is system boot process", which should be "completed its system boot process"
- Page 592 refers to an OnBootCompleted class, which should be OnBootReceiver
- Page 604 has WakefulIntenService instead of WakefulIntentService
- Page 644 has an incorrect link to the EU4You project — it should link here
- Page 646 has "it simply display the" instead of "it simply displays the"
- Page 658 has "this indicates" leading off a sentence, without capitalizing the T
- Page 658 has "goes to those page" instead of "goes to this page"
- Page 667 has "one a time" instead of "one at a time"
- Page 678 has "taking a 'old features only' approach", which should be "taking an 'old features only' approach"
- Page 1081 in three places refers to getLastKnownPosition(), which should be getLastKnownLocation()
Version 4.0 (digital) - August 2012
- The cover on the APK editions shows Version 3.8 instead of Version 4.0
- Pages 26-28 have incorrect screenshots for Figures 9-11
- Page 93 has an extraneous "will give" in the first sentence of the last paragraph
- Page 150 has "select the hello string resource" — "hello" should be "hello_world"
- Page 193 and 195 have incorrect screenshots
- Page 238 has "supplied to use as" instead of "supplied to us as"
- Page 303 refers to setHasActionBar() where it should have setHasOptionsMenu()
- Page 345's Figure 144 has the wrong screenshot
- Page 351 refers to android:orientation where it should have android:screenOrientation
- Page 373, in the fourth paragraph, has "hae" where it should have "have"
- Page 448 is missing a period before the words "Version 1".
- Page 549 refers to startPlayer() where it should be onClick()
- 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
- Page 658 has "does not matter, as we will not be using it, but the dialog requires it" twice
- Page 731 has the wrong code listing at the bottom of the page
Version 3.8 (digital) - July 2012
- 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
- Most places that refer to generics (e.g., Foo<Bar>) have a square bracket instead of an angle bracket on the left
- The "Prerequisites" sections for the Data Distribution, SQLCipher, Loaders, and Content Provider chapters have an invalid link to the Database chapter.
- Page 18 has "Manger" where it should have "Manager"
- Page 33 has a link to the old GitHub repo -- it should be https://github.com/commonsguy/cw-omnibus
- Page 42's Figure 20 was not update for the output of the R20 tools
- Pages 183-193 (chapter on WebView) have a number of incorrect app screenshots
- Page 186 should have "http://commonsware.com" instead of "http://google.com" in the source code listing
- 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).
- The images on pages 187 and 189 are incorrect
- Page 275 has "display simple content" where it should have "displaying simple content"
- Pages 404-5 have slightly out-of-date figures (Figures 145 and 146)
- Page 545 has an off-by-one line error in the code listing for the <service> element
- The last paragraph on page 551 has DownloadCheckService and DownloadInstallService reversed
- The last paragraph on page 552 should point out that these static data members should be defined on DownloadInstallService
- Page 582's code listing is for DownloadCompleteReceiver instead of UpdateReceiver
- Page 1102 has "AlarmManger" where it should have "AlarmManager"
- 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
- Page 58 still thinks Android stopped with 3.0.
- 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
- 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.
- In several places, there is a missing space after an ellipsis.
- 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.
- The fourth bullet on page 38 has "which hold", which should be "which holds".
- 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.
- In several places, "e.g.," is mangled in various ways.
- 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:gravityin this case.
- In two spots on page 282, "an receiver" appears where it should be "a receiver".
- In several places, style resource source code listings word-wrap in unfortunate spots.
- The code snippet at the top of page 336 is missing the 2nd opening parenthesis at the start of the
ifblock and should be using
SCREENLAYOUT_SIZE_MASKwhere the snippet has the first occurrence of
- Page 342 shows fonts with sizes in
dip, but they should be in
pxfor the purposes of this particular example.
- Page 383 shows an implementation of
onActivityCreated()that chains to the superclass implemenation of
onCreate()instead of chaining to
- Page 406 has "We will examine this technique later in this book", with a link that points back to itself.
- Page 407 has "indicating than an", which should be "indicating that an".
- Page 409 has a reference to an ActionBarHC app, which should be ActionBarBC.
- Page 427, at the top, has "reflecting that there is no StrictMode in newer versions of Android", where "newer" should be "older".
- Page 449 has
onLoadHeaders()where it should have
- The second source listing on page 453 is off by two lines.
- Page 465 has, in one code sample,
while (!result.moveToNext()), which should be
- Page 546 has "on
onCreate()", which should be "in
- Page 622 indicates that there is no Dalvik JIT compiler, when that has been added.
- Page 675 has
ndroid:namewhere it should be
- Page 683 has
android:packagewhere it should be
Version 3.5 (digital) - February 2011
- The PDF bookmarks have an erroneous entry for the chapter bookmark for "Where Do We Go From Here?".
- Page 97 indicates that you have to set margins on a per-side basis — this is incorrect, as you can use
android:layout_marginto affect all four sides at once.
- Page 118 indicates that
ListViewis covered in Chapter 11, when it really is now covered in Chapter 12.
- Page 120 has "in a pipe-delimited", which should be "in a pipe-delimited list".
- Page 172 has "each let you provide a callback object" — "let" should be "lets".
- Page 212 has "option menus" where it should have "options menus".
- Page 215 has "a ordinary", which should be "an ordinary".
- Page 221 has "option menus" where it should have "options menus".
- 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.
- 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."
- In several places, such as pages 275-6, there is a missing space after an ellipsis.
- In several places, such as page 275,
onRetainNonConfigurationshould be replaced with
- Page 276 has "there are a wide range", which should be "there is a wide range".
- In several places, such as page 595, a dimension in the prose will be referred to in
pxwhere the accompanying source code listing has the dimension in
- 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.
- Page 629 has the wrong code snippet.
- 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
- All occurrences of "et. al." should be "et al." instead.
- All occurrences of "vis a vis" should be "vis-à-vis" instead.
- Page 2 has "their phone" where it should have "their phones".
- Page 13 is missing the word "take" from "unpacking it will take a fair bit of time".
- Page 45 has "via a add-in" where it should be "via an add-in".
- The Maps chapter has the "Rugged Terrain" section twice.
- Page 470 refers to
com.google.android.widgetwhere it should simply be
- Page 472 refers to
getMapController(), which should be
Version 3.3 (digital) - November 2010
- All occurrences of "vis a vis" should be "vis-à-vis" instead.
- The license cited for the Four-to-Free Guarantee has an erroneous space between "Share" and "Alike".
- The EPUB and Kindle books are missing sub-bullets under "Controls the focus sequence:" in Chapter 5.
- All references to
CheckAdapter(e.g., page 115) should refer to
- Page 126 has "The SeekBar in an input widget", which should be "The SeekBar is an input widget".
- 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.
- Both sample projects in the Menus chapter have
super.onOptionsItemSelected()in places where they should have
- 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.
- Page 240, in two places, has
- Page 271 refers to a Close button that no longer exists in that sample.
- 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
- All occurrences of "vis a vis" should be "vis-à-vis" instead.
- 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.
- In the second paragraph of page 68, the two example bits of code are reversed.
- Page 217 has a section, "Spinning a Thread", that should not be there, as it was moved to a later spot in the book.
- 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
- The Table of Contents entry for "...And Checking It Twice" links to the wrong page.
- Pages 9-10 suggest that the
android create projectcommand will create a
tests/directory, when it does not.
- The last line of code on page 23 has
--package com.commonsware.android.nowwhere it should have
- The last sentence of the first paragraph of page 32 is missing the last four words, "later in this chapter".
- Page 51 refers to an "accessor" where it should refer to a "setter".
- Page 90 has "a XML" where it should have "an XML".
- The first paragraph of page 92 has
android:verticalSpacing="35"where it should have
- The list of callbacks on page 95 missed
- Page 219 has "more important that others", which should be "more important than others".
- Page 220 has an extraneous space at the end of the third bullet.
- Page 276 refers to a
Files/Staticsample application as if that had been covered before, but that sample does not appear until page 321.
- Page 290 refers to
PreferencesManagerwhere it should have
- 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.
- 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.
- 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
- Page 23 has
com.commonsware.android.Nowwhere it should have
- Page 25 has
android.Activitywhere it should have
- 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.
- Page 125 has a code sample that shows calling
Context. That is incorrect. For an inner class of
Activity, just call
getLayoutInflater()directly, to reach the
- 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.
- The chapter on Notifications fails to mention that you need
flagsin order to use the LEDs.
- The code snippet on Page 310 is missing the second parameter in the call to
rawQuery(), which should be
- 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
- Pages 41 and 66 have "definining" where they should have "defining".
- Page 67 has "Next, we define the label, which is fairly basic, except for its own 15-pixel
android:padding = "15px")." — the attribute should be
- Page 142 has "straight-foward" where it should have "straight-forward".
- Pages 224 and 263 reference
activityCreator, which has been replaced with
android create project.
- Page 293 has an incorrect screenshot, showing "Simple Preferences" for a heading when it should be "Other Preferences".
- Page 302 has "CosntantsBrowser" where it should have "ConstantsBrowser".
- Page 374 has "explictly" where it should have "explicitly".
- Page 380 has "handes" where it should have "handles".
- Page 395 has "Critieria" where it should have "Criteria".
- Pages 469 and 472 have "idiosyncracies" where they should have "idiosyncrasies".
- Page 473 has "stylii" where it should have "styli".
- Page 473 has "ANRDROID_ID" where it should have "ANDROID_ID".
Version 2.8 (digital) - November 2009
- Page 14 has "These are called br9adcast receivers", which should be "These are called broadcast receivers". The author is sufficiently mortified.
- Page 15 shows the use of a
minSdkVersionattribute in a code sample, but it leaves off the
- Page 20 has "There should be a new values", which should be "There should be a new value".
- Pages 109-111 demonstrate a technique for using new editions of
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.
- 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.
- 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.
- Page 224 has "add an receiver" where it should have "add a receiver".
- Page 267 has "such a widget's padding" where it should have "such as a widget's padding".
- 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)".
- 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".
- Page 359 has "or a once at install time", which should be "or all at once at install time".
- Page 374 has "To start a service, on approach is", which should be "To start a service, one approach is".
- Page 374 has "if its your own service", which should be "if it's your own service".
- Page 381 has "where you supply an PendingIntent", which should be "where you supply a PendingIntent".
- Page 390 has "You will also a permission in your application", which should be "You will also need a permission in your application".
- Page 402 has "remember to multiple the", which should be "remember to multiply the".
- Page 402 has "offers toggleSatellite(), which, as the names suggest, toggle", which should be "offers toggleSatellite(), which, as the name suggests, toggles".
- Page 415 has "navigate to spot", which should be "navigate to the spot".
- 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".
- The code sample spanning pages 457-8 is a duplicate of a previous code sample. This one should have
- Page 467 has "Ther are few", that should be "There are few".
- 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
- Page 16 twice erroneously refers to
- Page 24 has "the directory where you wan the skeleton", where it should have, "the directory where you want the skeleton"
- Page 24 also has the wrong package name for the
android create projectexample. The package should be
- Page 26 references
android.Activitywhere it should have
- Page 27 references using
tools/emulatorto launch the emulator, which is still true, but you need to provide an
-avdswitch to name the AVD you wish to use. For more on AVDs, see the Getting Going chapter, earlier in the book.
- The first bullet on page 66 has
android:layout_toRightwhere it should have
- 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).
- Page 124 indicates that
CursorAdapterand subclasses do that for you, so
newViw()should just return the empty row —
bindView()will then be called automatically.
- 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"
- Page 211 says that the
doInBackground()sleeps for "a quarter-second", when it actually sleeps for 200ms.
- 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.
- Page 230 has
RESULT_CANCELLEDwhere it should have
- Page 252 has
R.layout.another_fieldin a code sample, where it should be
- The example at the bottom of Page 252, and the example at the top of Page 257, both have a redundant
- 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"
- Page 294, in the third paragraph, refers to a "representation of the request body", where it should have "representation of the response body"
- 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"
- Page 346, in the first paragraph, refers to
getContentProvider(), which should be
- Page 360 has the phrase "means that observer that initiated", which should be "means that the observer that initiated"
- Page 406 refers to a screenshot that is not in this edition of the book.
- 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.
- Page 245 has the phrase "in that the break down the SQL statements", which should be "in that they break down the SQL statements"
- 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
- Page 113, near the bottom, says "we need to add a checkbox", where it should say, "we need to add a RatingBar"
- Page 194 has "amd" in the first full paragraph instead of "and".
- 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 (
ContentProvider/Constants) does not create an index.
- On page 243, in the third paragraph, "in that the break down" should be "in that they break down".
- Page 245, just before the example snippet, compares this snippet to the previous snippet (on page 244) — the two snippets are actually unrelated.
- Page 274, and perhaps other places, refer to
BroadcastReceiveras being an interface. In reality, it is an abstract class.
- 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."
- 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
- Page 372 cited "previous" source code — in reality, it is referring to the Weather and WeatherPlus sample applications.
- Links throughout the book to the Building 'Droids column on AndroidGuys.com have the incorrect URL.
Version 1.9 - Early December 2008
- 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.
- On page 142, the book indicates that you can only get the
onCreateContextMenu(). In reality, you can also get this by calling
- Page 180 refers to
runOnUIThread(), which should be
- The example array resource on page 231 is very wrong.
- On page 285, the third full paragraph ("The intent filter also...") should be deleted.
- Page 312 refers to
android.provider.CONTENT_URI, which should be
Plus many others too numerous to mention — just download Version 2.0.2!
Version 1.4 - Early November 2008
- On page 96, the book refers to
contentViewwhere it should refer to
- On page 121, the book refers to a "later chapter" about threads but fails to provide a hyperlink.
- 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.
- On page 137, please ignore the backslash that accidentally was added at the end of the page.
- On page 146, the prose refers to four menu choices, when (in this version of the sample) there are actually seven.
- 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".
- 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".
- Page 259 shows a sample path to a SQLite database on the phone, but includes the
.dbextension. 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.
- The last paragraph on page 302 is missing the word "than" at the end of the phrase "but by means other".
- Page 338 refers to
Parcelablewith a "(see below)" note, but there is no additional material on that interface.
Version 1.3 - Late September 2008
- 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."
- 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."
- Page 60 has three bullets, the second and third of which are repeated. The third should
- 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.
- Pages 80-81 show
columnWidthvalues as pure numbers, when they should be dimensions (e.g.,
- On pages 93, 128, and 397,
ViewInflateshould be changed to
- 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.
- The third line of Page 122 shows a
0that is not in monospace font, and so may appear to look like an O.
- Pages 174 and 396 refer to an obsolete
- 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.
- On page 229, where it says
Resources.getColor(R.dimen.forest_green), it should really say
- On pages 275, 281, and 402,
startSubActivity()should be changed to
- On pages 275, 318, and 398,
broadcastIntent()should be changed to
- Page 287 uses
CATEGORY_ALTERNATIVE, while page 288 uses
- 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:
- On page 7, where it says there are "five key items", it should be "seven key items"
- In the chapter on Maps, in the "Drawing the ItemizedOverlay" section, the "fourth bullet" should actually be the "last bullet"
- On page 12, the second paragraph refers to
com.commonsware.androidwhere it should refer to
com.commonsware.android.searchto line up with the example shown at the top of the page
- 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
- On page 60, the second paragraph refers to 16 in two places where it should be 15.
- On page 223, the bulleted list of parameters to
query()is missing the
- On page 225,
moveToNext(). Also, the code example is missing
result.moveToFirst();between the query and the
whileloop to get the
Cursorproperly positioned, and it to has an erroneous
next()that should be
Version 1.1 - August 2008
See problems #1-3 below
Version 1.0 - July 2008
- On page 26-27, the "And We Attach These To Java...How?" section references a
snicklefritz.xml— this name has no relevance to any example in this chapter. It's just a name.
- 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.
- In various places in the book, the
EditTextclass is incorrectly referred to as
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.