Head First Android Development

Errata for Head First Android Development

Submit your own errata for this product.


The errata list is a list of errors and their corrections that were found after the product was released.

The following errata were submitted by our customers and have not yet been approved or disproved by the author or editor. They solely represent the opinion of the customer.


Color Key: Serious Technical Mistake Minor Technical Mistake Language or formatting error Typo Question Note Update



Version Location Description Submitted By Date Submitted
PDF Page XV
3rd paragraph and second title in bold.

In the third paragraph it says: "But we assume that if you’re holding this book, you really want to learn >>>networking.<<<" And: So just how DO you get your brain to treat >>>networking<<< like it was a hungry tiger? It should be Android development instead of "networking".

Anonymous  Jul 27, 2011 
PDF Page XV
Second Paragraph

But we assume that if you’re holding this book, you really want to learn networking. So just how DO you get your brain to treat networking like it was a hungry tiger? Should networking in the above 2 sentences be replaced with Android?

David Martirosyan  Sep 08, 2011 
PDF Page jeastorga@gmail.com
jeastorga@gmail.com

The same content/paragraph appears on page v and vi: Your First App So you're thinking: "What makes Android so special?" ................. I don't know if this was intentional, but it seems like it's duplicated.

Jorge E. Astorga  Sep 12, 2011 
PDF Page 2
2nd paragraph

Text states "With careful planning, you're app ..." Change "you're" to "your".

spiceisland  Jul 28, 2011 
PDF Page 3
First real paragraph

Text states "There are or course ..." Change "or" to "of".

spiceisland  Jul 28, 2011 
PDF Page 8
Second "arrow" paragraph

Text states "... of the haiku on it;s own line ..." Chnage "it;s" to "it's".

spiceisland  Jul 28, 2011 
PDF Page 8
Last paragraph

Text states "Form there, you'll install ..." Change "Form" to From".

spiceisland  Jul 28, 2011 
PDF Page 9
Paragraph numbered as (3)

Paragraph ends "The ADT is really just a user interface, and the guts of the app building all happens here in the ADT." Change last "ADT" to "SDK".

spiceisland  Jul 28, 2011 
PDF Page 10
3rd paragraph

Text states "... development environment,. you can use ..." Change ",. you" to ", you".

spiceisland  Jul 28, 2011 
PDF Page 12
XML string sample

On page 12 of the sample the string “name” key got hyphens in them instead of a underscore. (test-image_title)

Anonymous  Aug 27, 2011 
PDF Page 13
1st paragraph

"android.developer.com" should be "developer.android.com"

Anonymous  Jul 28, 2011 
PDF Page 13
Page title

Title reads "Doanload and install the SDK". Change "Doanload" to "Download".

spiceisland  Jul 28, 2011 
PDF Page 13
Section title

Title says 'Doanload' instead of 'Download'

Ernesto Cullen  Oct 10, 2011 
PDF Page 17
Right-most diagram "arrow"

Text states 'Press "Instal Selected"' Change "Instal" to "Install".

spiceisland  Jul 28, 2011 
PDF Page 18
End of page

To get project to build, a Build Target must be selected. This is not mentioned or shown on the page 18

Kevin Smith  Jul 28, 2011 
PDF Page 18
3rd paragraph

The actual menu option to create a new Android project is (now, might be different in older than R12/Eclipse 3.7 versions) File->New->Other->Android->Android Project.

jwenting  Aug 30, 2011 
PDF Page 24
Screenshot of AndroidLove app

Screenshot display does not match that created following previous instructions. Screenshot window-title bar displays "5554:default". However, instructions (on page 23) create a window which actually displays "5554:standard". Screenshot app displays "Hello World, AndroidLove!". However, instructions (on page 18) create an app that displays "Hello World, HaikuDisplay!".

spiceisland  Jul 30, 2011 
PDF Page 24
First paragraph

In the first paragraph, "Now that you have an emulator configuration set up, run the app again. Run it the same was as before by pressing the play button in the toolbar." The sentence "Run it the same was..." Should be "Run in the same way..." Change "was" by "way".

Jorge Mario Palacio Gomez  Aug 01, 2011 
PDF Page 28
First paragraphs

The second line says Navigate to /res/layout/main.xml in the "exlipse" instead of "eclipse" package explorer and ....

Anonymous  Jul 28, 2011 
PDF Page 28
Folder-layout diagram

Purple folder called "layouts". Change "layouts" to "layout".

spiceisland  Jul 30, 2011 
PDF Page 29
The IDE graphical editor picture

The picture of the graphical editor looks a bit different than what it currently looks on the IDE. The version of the ADT that I have is: Android Development Toolkit Version: 12.0.0.v201106281929-138431 (c) Copyright 2007-2011 The Android Open Source Project. All rights reserved.

Jorge E. Astorga  Sep 12, 2011 
PDF Page 30
Second answer at bottom-right of page

Seems to be a spurious single-backquote (grave, or ` ) after the word "So".

spiceisland  Jul 30, 2011 
PDF Page 33
1st paragraph

Text states "Right below layouts in the res folder ..." Change "layouts" to "layout".

spiceisland  Jul 30, 2011 
PDF Page 33
Folder-layout diagram

Purple folder called "layouts". Change "layouts" to "layout".

spiceisland  Jul 30, 2011 
PDF Page 33
Do this box

Text states "Navigate to the main.xml file in the Eclipse package explorer." Change "main.xml" to "strings.xml".

spiceisland  Jul 30, 2011 
PDF Page 34
Raw xml screenshot at bottom of page

Screenshot display does not match that created following previous instructions. Screenshot app displays "Show some love!". However, instructions (on page 18) create an app that displays "Hello World, HaikuDisplay!".

spiceisland  Jul 30, 2011 
PDF Page 35
arrow sign pointing to image

There is a typo after hello World. It says "Sting" instead of String.

monika budhiraja  Jul 28, 2011 
PDF Page 35
1st paragraph

Text reads "... values by select an item ..." Change "select" to "selecting".

spiceisland  Jul 30, 2011 
PDF Page 38
2nd paragraph, end of the first line.

The text "toadd" is a typo for "to add"

draines  Jan 30, 2012 
PDF Page 39
Red-bordered bullet list on right

Fifth bullet point states "Layouts are defined in XML and you can find them in /res/layouts." Change "layouts" to "layout". Six bullet point states "Values (like strings) are defined in Android Resource XML files. They can e found in /res/values." Change the solitary " e " to " be ".

spiceisland  Jul 30, 2011 
PDF Page 41
In speech bubble in main picture

Says" Its like harding cattle. Harding should be herding.

Kevin Smith  Jul 28, 2011 
PDF Page 43
Second "arrow" note on the left

Text reads "HIde the haiku when the ap loads." Change "HIde" to "Hide". Change "ap" to "app".

spiceisland  Jul 30, 2011 
PDF Page 43
Top right, page header.

On this, and other right-side pages, the header is incorrect. It is labelled "working with feeds" instead of the proper chapter title "adding behavior".

draines  Jan 30, 2012 
PDF Page 46
End of 1st paragraph

Text reads "You can find it under /res/layout.main.xml." A "/" at the end of "layout" has been replaced with a "." Should read "You can find it under /res/layout/main.xml."

spiceisland  Jul 30, 2011 
PDF Page 46
1st paragraph

"Open main.xmlby by" should be "Open main.xml by"

Anonymous  Aug 02, 2011 
PDF Page 46
1st paragraph, 4th line, first full sentence.

The sentence reads "Open main.xmlby double clicking ...". The sentence is missing a space after the file name: "Open main.xml by double clicking ..."

draines  Jan 30, 2012 
PDF Page 47
Text for 2nd red numbered point

Text reads "You’ll the first View defined in the file is the Button you just added!" Add "see" between "You'll" and "the" (i.e "You’ll see the").

spiceisland  Jul 30, 2011 
PDF Page 47
Raw xml screenshot at bottom of page

When I added a new button, the resulting XML looked quite different from the example given here. The value of the "android:text" attribute was plain "Button" instead of "@+id/Button01". Following the rest of the instructions to convert this into a string resource worked, so no long term problem. Just very confusing and initially worrying for a noob like myself. Is there some preferences setting that would affect this sort of behaviour ? I'm using the latest Eclipse release (Indigo, aka v3.7.0) under Ubuntu 11.04 and the Google's ADK is 12.0.0.v20110628.

spiceisland  Jul 31, 2011 
PDF Page 47
2nd paragraph (numbered 1), 2nd sentence, at the line split.

Missing word, "where the button is going render." Should be "where the button is going to render."

draines  Jan 30, 2012 
PDF Page 48
2nd paragraph

Text states "... TextView displaying the hauki and the Button ..." Change "hauki" to "haiku".

spiceisland  Jul 31, 2011 
PDF Page 48
2nd paragraph

The code referred to in chapter 2 seems to have morphed compared to that created in chapter 1. TextView "android:text" attribute has changed value from "@string/hello" to "@string/haiku". TextView seems to have gained a new attribute, "android:id", which was missing from the sample XML created in chapter 1.

spiceisland  Jul 31, 2011 
PDF Page 48
2nd text box.

In this text box and throughout the chapter, it is apparent that the name of the text string created in the first chapter has been changed from "hello" to "haiku". This problem shows up throughout the chapter and causes a bit of confusion.

draines  Jan 30, 2012 
PDF Page 51
2nd paragraph, 2nd sentence.

The sentence reads: "Open strings.xml and click on the strings.xml." This is entirely unclear on what a person should do. Suggested rewrite could be along these lines: "Click on the strings.xml tab at the top of the editing area to select that file. Then click on the strings.xml tab at the bottom of the editing area to open select the XML view of the file."

draines  Jan 30, 2012 
PDF Page 56
2nd paragraph

Text reads "You could remove the TextView and it back once ..." Add "add" between "and" and "it" (i.e "and add it").

spiceisland  Jul 31, 2011 
PDF Page 57
Top-right "arrow" text

Text states "If you know the class you're looking for, but now the package, you can type it in here to search the documentation." Perhaps change "now" into "not" ?

spiceisland  Jul 31, 2011 
PDF Page 57
top left caption/comment of the screenshot

the sentence should read "This area lists all of the packages in.." instead of "This area lists all of the packes in..."

GreenITGuy  Jul 31, 2011 
PDF Page 57
Top right comment/caption on the screenshot

2nd line should read "looking for, but not the package," instead of "looking for, but now the package"

GreenITGuy  Jul 31, 2011 
PDF Page 64
Sample of XML at bottom of page

Example XML has Button "android:text" attribute value set to "@+id/Button01”. Change value to "@string/love_button_text" to match instructions given earlier in chapter.

spiceisland  Jul 31, 2011 
PDF Page 64
2nd paragraph

Give is a value of onLoveButtonClicked to be descriptive of what the Button is supposed to do. Change "Give is a value" to "Give it a value"

David Martirosyan  Sep 15, 2011 
PDF Page 66
Folder-layout diagram

This example of folder hierarchy does NOT match what you get from following the instructions in chapter 1. The actual hierarchy is: AndroidLove -> src -> android.love -> HaikuDisplay.java

spiceisland  Jul 31, 2011 
PDF Page 68
First paragraph

Should say onLoveButtonClicked instead of onLoveVuttonClicked. on paragraph: "Let’s add the onLoveVuttonClicked method to AndroidLove now. Once this is done, we can run ..."

Juan Hernandez  Jul 27, 2011 
PDF Page 68
Code sample

My code would not run until I added the following line: import android.view.View;

spiceisland  Jul 31, 2011 
PDF Page 68
2nd paragraph

The paragraph starting "The new onLoveVuttonClicked method..." should be "The new onLoveButtonClicked method..."

Claus Jensen  Aug 02, 2011 
PDF Page 70
First paragraph

A parenthesis starts but it does not end. In the paragraph: You’ve got a disconnect right now. Your screen Views >>>>>> ( <<<<<< the Button and the TextView displaying the haiku are defined in XML in the main.xml layout. But you action code is defined in Java in the AndroidLove Activity. How are you supposed to get references to XML defined Views from your Java code?

Juan Hernandez  Jul 27, 2011 
PDF Page 70
Second paragraph, The 'R' file

On the second paragraph subtitled: The 'R' file, it seems like the first sentence is missing a noun. 'To solve this, Android generated a special <?> called ..."

Jorge E. Astorga  Sep 12, 2011 
PDF Page 70
1st paragraph

But you action code is defined in Java in the AndroidLove Activity. Change "But you" to "But your"

David Martirosyan  Sep 15, 2011 
PDF Page 70
"The 'R' file" paragraph

sentence: To solve this, Android generated a special called the ‘R’ file. There's a missing "file" word.

Virginie  Nov 08, 2011 
PDF Page 70
"Do this!" section

The text assumes the existence of some "com/headfirstlabs" path/package while the reader following the book didn't create any.

Virginie  Nov 08, 2011 
PDF Page 72
.

The page is missing the Imports. Without the Imports the program will not work. I did not know that Imports were required. I started from scratch 3 different times and still could not get the program to run. Then a google search revealed the Imports. After adding the proper imports, the program worked fine. If this book is to teach people how to program the Android, adding the Imports should be mentioned in the book. Anybody not familiar with programming would have never figured out how to get the program to work.

Anonymous  Oct 24, 2011 
PDF Page 74
first paragraph

"an R file constant will getgenerated." missing white space after "get"

Virginie  Nov 08, 2011 
PDF Page 76
na

No mention is made on this or the preceding pages of the imports needed to get View and TextView to work. A paragraph should be inserted telling the user that they need to add the following to their .java file import android.view.View; import android.widget.TextView; And also explain how the user can work out from the online developer guide what imports are required for a given class.

Albert White  Oct 07, 2011 
PDF Page 76
Action Magnet Snippets

Also affects page 75 and the source code download for Chap02. When running under Honeycomb 3.2 I needed to include the line textView.setText(R.string.haiku); before the line textView.setVisibility(View.VISIBLE); The missing line (setText) is included in the source code download for Chap02, but the code is missing the 'setVisibility' line.

James Lyle  Oct 09, 2011 
PDF Page 78
Next to last bullet in the pull-out box.

The next to last bullets need some editing. From: "to use Use the android:onClick property on Button to add an action method. That action method ..." Possible to: "Use the android:onClick property for the Button object to add an action method. That action method ..."

draines  Jan 30, 2012 
PDF Page 82
3rd paragraph

Go to http://www.nasa.gov/rss/image_ of_the_day.rss Link wraps to next line. When you click on the link it takes you to http://www.nasa.gov/rss/image_ which of course does not work.

Mike Raben  Jul 29, 2011 
PDF Page 82
First paragraph, second sentence

"app from he image feed" should be "app from the image feed" change "he" to "the"

Jorge E. Astorga  Sep 13, 2011 
PDF Page 82
xml editor diagram

The image tag doesn't seem to be in the xml any longer.

David Martirosyan  Sep 18, 2011 
PDF Page 87
thought bubble

I can’t want to see it working! Change "want" to "wait"

David Martirosyan  Sep 18, 2011 
PDF Page 88
Project Name info text

But It’s better leave out spaces 1. Make "It's" lower case. 2. Add "to" after "better"

David Martirosyan  Sep 18, 2011 
PDF Page 88
Build Target info text

Select the latest platform you have installed (2.3 at the timeof this writing Change "timeof" to "time of"

David Martirosyan  Sep 18, 2011 
PDF Page 90
Image

Naming the 3 strings "test-image_title, test-image_date and test-image_description" leads to a compiling error in the R.java file: Multiple Markers at this line -Syntax error on token "-" I fixed by changing string names to testImage_title etc.

Mike Raben  Jul 29, 2011 
PDF Page 91
do this box

res/drawable_hdmi should be res/drawable_hdpi

capnjimbo  Aug 02, 2011 
PDF Page 92
Code in TextView Tags

test_image_title, test_image_description, test_image_date use underscore between "test" and "title", while on page 90 they use hyphens ( test-image_title, test-image_date, test-image_description ).

David Martirosyan  Sep 20, 2011 
PDF Page 94
Code in TextView Tags

test_image_title, test_image_description, test_image_date use underscore between "test" and "title", while on page 90 they use hyphens ( test-image_title, test-image_date, test-image_description ).

David Martirosyan  Sep 20, 2011 
PDF Page 100
1st paragraph

You were to used the ScrollView to make the entire screen scroll. Change "used" to "use"

David Martirosyan  Sep 20, 2011 
PDF Page 104
Ready Bake Code

There are a few errors with SAX parsing example that make it much more difficult than it should be at that point in the book. It took me quite a while to work through all of the errors and get the example app working. One problem is actually with the RSS feed used for the example. Images won't show up in the app because there is not a "url" tag in NASA's xml feed. Instead, the image URL is an attribute of the "enclosure" tag: <enclosure length="12345" type="image/jpeg" url="http://www.nasa.../> To fix it: In the startElement 'if' blocks, you would change the line: if (localName.equals(“url”)) { inUrl = true; } else { inUrl = false; } and call the .getValue("url") on your Attributes variable: if (localName.equals("enclosure")) { inUrl = true; imageUrl=attributes.getValue("url");} else { inUrl = false;} then call the call to getBitmap to: if (inUrl && imageUrl != null) {image = getBitmap(imageUrl);}

Friffer  Jul 30, 2011 
PDF Page 105
ready bake code

the method public String getImage() can't possibly work as its return value is not a String but a Bitmap. Return type of this method should reflect this, yielding public Bitmap getImage() {return image;}

jwenting  Aug 31, 2011 
PDF Page 105
SAX Parse Ready Baked Code

The XML parser code should be handle the fact that data from the rss are grabbed in chunk, otherwise you could have only a little part of the description of the image. It is a FAQ of the SAX.

Alessandro Boggiano  Sep 02, 2011 
PDF Page 105
Do this! box at bottom of page

The box reads: Download the IotdHandler code from the Head First Android Development site and add it to your project. The downloaded code will not work with the rest of the example since on page 106 it says to call handler.processFeed(); but in the downloaded class the method looks like below. public void processFeed(URL url)

David Martirosyan  Oct 09, 2011 
PDF Page 106
2nd paragraph

"afterprocessFeed() returns" is missing a space (ie, should be "after processFeed() returns"

capnjimbo  Aug 03, 2011 
PDF Page 106
from here on

The network calls made in processFeed() and the completely unmentioned getBitmat(), which can only be found in the online code, will not work. I don't know when the restriction on putting networking calls in the UI thread was introduced to Android but you can't do this with 2.3 onward. Both these functions should be put in a separate thread in order to work. This is quite a large change, even from the program in the public SCM for the book. I suggest that: * getBitmap is moved to IotdHandler and stores the Bitmap as an attribute, automatically fetching it when the feed is processed * resetDislpay modified to get the Bitmap from IotdHandler *onCreate() for NasaIotd should something like this: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iotdHandler = new IotdHandler(); // try { // Log.i(TAG, "processing : " + URL); // iotdHandler.processFeed(this, new URL(URL)); // resetDisplay(iotdHandler.getTitle(), iotdHandler.getDate(), iotdHandler.getUrl(), iotdHandler.getDescription()); // } catch (Exception e) { // e.printStackTrace(); // } new FetchFeed().execute(); } * an inner class added to NasaIotd: private class FetchFeed extends AsyncTask<Void, Void, Void>{ protected void onPostExecute(Void param) { MainActivity.this.resetDisplay(iotdHandler.getTitle(), iotdHandler.getDate(), iotdHandler.getDescription(), iotdHandler.getImage()); } protected Void doInBackground(Void... params){ try { iotdHandler.processFeed(MainActivity.this, new URL(URL)); } catch (MalformedURLException e) { e.printStackTrace(); Log.e(TAG, e.getMessage()); } return null; } }

Peter Shannon  Aug 08, 2012 
PDF Page 106
onward

Adding this to the onCreate() method will disable strict mode for networking. StrictMode.ThreadPolicy threadPolicy = new StrictMode.ThreadPolicy.Builder().permitNetwork().build(); StrictMode.setThreadPolicy(threadPolicy);

Peter Shannon  Aug 12, 2012 
PDF Page 108
Code Magnets

Copying the code given into the NasaDailyImage.java file will result in several errors. First is with the resetDisplay method parameters. description should be a StringBuffer instead of a String. The call to this method on page 109 is also incorrect. It calls the parent methods of each parameter: resetDisplay(iotdHandler.getTitle(), iotdHandler.getDate(), iotdHandler.getImage(), iotdHandler.getDescription()); This results in an error for each of the methods called. One way to fix is to set each of those methods and their variables to static in the IotdHandler.java file. A better fix would simply be to call the methods on the handler object you created: resetDisplay(handler.getTitle(), handler.getDate(), handler.getImage(), handler.getDescription());

Friffer  Jul 30, 2011 
PDF Page 110
entire page

Using R12 SDK/emulator against Android 2.2, no IOException is generated. The only thing returned is a vague "permission denied". Of course this never gets printed to the log because of the try...catch in IotdHandler which silently ignores the exception and continues as if nothing happened. It wasn't until I changed the code into URL dataUri = new URL(url); InputStream inputStream = dataUri.openStream(); reader.parse(new InputSource(inputStream)); } catch (Exception e) { String error = e.getMessage(); System.out.println(e.getMessage()); } and ran it through the debugger that at least that much was visible. A watch on the exception shows it to be a java.net.SocketException with no further information.

jwenting  Aug 31, 2011 
PDF Page 111
3rd paragraph

In the 4th line of th 3rd paragraph instead of "requsts" it should be "requests"

Juan Hernandez  Jul 27, 2011 
PDF Page 111
3rd paragraph

You can specity the permissions your app needs using a group of permission constants in AndroidManifest.xml. Change specity to specify

David Martirosyan  Oct 09, 2011 
PDF Page 113
2nd paragraph

There are a bunch of different permissions that you can ad to your application. Change ad to add

David Martirosyan  Oct 09, 2011 
PDF Page 116
2nd paragraph

To correct the phrase "That tool is rhe Android Hierarchy Viewer.". Replacing "rhe" for "the".

Thiago Carvalho da Silva  Sep 24, 2012 
PDF Page 117
Image at the bottom of the page

The "written" instruction balloons do not tell the user to click on the "android.widget.ImageView" line so that the ImageView will be highlighted with the red box alluded to by the rest of the instructions.

draines  Feb 13, 2012 
PDF Page 117
Image at the bottom of the page

The "written" instruction balloons do not tell the user to click on the "android.widget.ImageView" line so that the ImageView will be highlighted by the red box alluded to by the rest of the instructions.

draines  Feb 13, 2012 
PDF Page 117
Missing text for the image at the bottom of the page

The "written" instruction balloons do not tell the user to click on the "android.widget.ImageView" line so that the ImageView will be highlighted by the red box alluded to by the rest of the instructions.

draines  Feb 13, 2012 
PDF Page 119
1st paragraph

With the adjustViewBounds properts upated in your layout, run the app again. change properts to property change upated to updated

David Martirosyan  Oct 09, 2011 
PDF Page 121
bullet points box

res/drawable- hdmi should be res/drawable-hdpi

capnjimbo  Aug 02, 2011 
PDF Page 121
Bullet Points - 3rd bullet

It’s a good practice to break your app down into small development pieces Probably should get rid of the "a" after "It's"

David Martirosyan  Oct 09, 2011 
PDF Page 124
1st paragraph - not the bubble

but it’s a idea to understand why you’re being asked for something. should "good" be inserted between "a" and "idea"?

David Martirosyan  Oct 10, 2011 
PDF Page 126
2nd paragraph

Let’s build the button bar as a standalone layout and then add it the app’s current layout. Should this sentence have a "to" between "it" and "the" to look like the below? Let’s build the button bar as a standalone layout and then add it to the app’s current layout.

David Martirosyan  Oct 10, 2011 
PDF Page 126
2nd paragraph

Encapsulating parts of your fullscreen layout into separate smaller layouts can be a good way to organize layouts. change "fullscreen" to "full screen"

David Martirosyan  Oct 10, 2011 
PDF Page 128
page title

"Use properties to fune-tune the layout" should be "Use properties to fine-tune the layout"

capnjimbo  Aug 04, 2011 
PDF Page 128
2nd box

android:margin-top should be android:layout_marginTop here and throughout the book. Ditto for other layout properties.

jwenting  Aug 31, 2011 
PDF Page 129
1st paragraph

layout-width and layout-height boxes, second box should be layout_width

Friffer  Jul 30, 2011 
PDF Page 130
2nd row from bottom

"android:margin-top" attribute is incorrect; should be "android:layout_marginTop"

capnjimbo  Aug 05, 2011 
PDF Page 130
throughout page

every hyphen on the page should be an underscore. eg. wrap-content->wrap_content layout-width->layout_width same problem exists on page 132.

capnjimbo  Aug 05, 2011 
PDF Page 130 and 132
Magnets with the "layout" attribute.

In both of these pages and anywhere else in this chapter that the magnets are used with the "layout_xxx" attribute, the magnet incorrectly uses a dash instead of an underscore. This is true for some of the values as well (i.e. wrap-content instead of wrap_content).

draines  Feb 13, 2012 
PDF Page 131
entire page

page has been erroneously duplicated and should be removed; page exists in its correct position at page 133

capnjimbo  Aug 05, 2011 
PDF Page 132
1st paragraph

Capitalize the third sentence starting with "you"

David Martirosyan  Oct 13, 2011 
PDF Page 138
entire page

Omission: the button is never hooked up with the event handler (onRefresh()). A property 'android:onClick="onRefresh"' should be added to the button definition in main.xml.

jwenting  Aug 31, 2011 
PDF Page 144
1st paragraph

You should have also dismissed when dialog once the work is completed. Change "when" to "the". I'm guessing "once the work is completed" should be in the past tense.

David Martirosyan  Oct 13, 2011 
PDF Page 146
1st paragraph

In the sentence: "The UI thread has a queue of work, and it continually gets the mot important chunk of work to process." It should say "more" instead of "mot".

Juan Hernandez  Jul 29, 2011 
PDF Page 146
In the diagram

It should say "Repaint" instead of "Repain" in reference number 2.

Juan Hernandez  Jul 29, 2011 
PDF Page 146
1st Graphic

The second task has a label of "Pperform layout". Should it be "Perform layout"?

David Martirosyan  Oct 13, 2011 
PDF Page 146
2nd Graphic

Task 1 reads "This expensive call on call on the UI thread keeps repaints from happening." "call on" is repeated twice.

David Martirosyan  Oct 13, 2011 
PDF Page 147
Graphic

On Task 2 change "Repain" to "Repaint"

David Martirosyan  Oct 13, 2011 
PDF Page 148
Sample Code

The book doesn't mention that "dialog" now has to be declared as a class variable. private ProgressDialog dialog;

David Martirosyan  Oct 13, 2011 
PDF Page 173
Code box

ListView code missing line designating "android:id="@+id/times_list" Leads to errors later in the chapter when assigning the adapter to that id.

Friffer  Aug 01, 2011 
PDF Page 174
1st paragraph, 4th lie

possessive apostrophe used for a plural. "You can populate your ListView’s" should be "You can populate your ListViews"

capnjimbo  Aug 05, 2011 
PDF Page 181
near bottom (page is an XML listing)

The second-to-last </LinearLayout> closing tag needs to be moved above the <ScrollView>. As it is, the ScrollView becomes part of the header, which you don't want -- the header for landscape mode should consist of the title, date, and the two buttons. Also, in the ScrollView opening tag, there's no whitespace between layout_height and layout_weight.

DaveLindsley  Oct 13, 2011 
PDF Page 187
item (2), pixel density

If the smaller screen is supposed to have a greater pixel density ... then aren't the two grids swapped? That is, shouldn't the grid with the smaller/greater number of squares be on the left (under the smaller screen)?

DaveLindsley  Oct 13, 2011 
PDF Page 190
1st line

"You should have completed the getView method blow" should be "You should have completed the getView method below"

capnjimbo  Aug 05, 2011 
PDF Page 195
4th line from bottom of ready bake code

getImage function returns wrong type. public String getImage() { return image; } should be public Bitmap getImage() { return image; }

capnjimbo  Aug 04, 2011 
PDF Page 203
sidebar

"When working on a multi-screened app, always start with your post important use case." should of course be "When working on a multi-screened app, always start with your most important use case."

jwenting  Sep 01, 2011 
PDF Page 203
last paragraph

"That’s why the first AVD that you created had suck big buttons and icons..." should read "...such big buttons and icons..."

DaveLindsley  Oct 17, 2011 
PDF Page 205
last line

"make your own Android context men- the menu that pops up when" should be "make your own Android context menu, the menu that pops up when"

jwenting  Sep 01, 2011 
PDF Page 209
bottom illustration

"ExitText" should be "EditText"

jwenting  Sep 01, 2011 
PDF Page 227
code box,2nd line

Menu class erroneously shown as argument. super.onCreateOptionsMenu(Menu m); should be super.onCreateOptionsMenu(m);

capnjimbo  Aug 07, 2011 
PDF Page 229
Ready Bake Code

Eclipse forces the type of onCreateOptionsMenu to be boolean, not void. Fixed by changing the method to: public boolean onCreateOptionsMenu(Menu m) { super.onCreateOptionsMenu(m); MenuInflater menuInflater = getMenuInflater(); menuInflater.inflate(R.menu.time_list_menu, m); return true; }

Friffer  Aug 02, 2011 
PDF Page 229
ready bake code box

function declared as wrong type; onCreateOptionsMenu should be boolean, not void. ie: public void onCreateOptionsMenu(Menu m) should be public boolean onCreateOptionsMenu(Menu m) same mistake is made in stub on page 227. further, function needs to return true.

capnjimbo  Aug 07, 2011 
PDF Page 231
code box

in the if statement, item.id is not how the item's id is accessed. The code on page 234 correctly shows this as item.getItemId().

Friffer  Aug 02, 2011 
PDF Page 231
bottom box

Incorrect method signature. Should be if (item.getItemId() == R.id.add_time_menu_item) { }

jwenting  Sep 01, 2011 
PDF Page 231
Different locations

onMenuItemSelected() should be replaced with OnOptionsItemSelected().

Alessandro Boggiano  Sep 02, 2011 
PDF Page 257
code box

RESULT_CANCELLED should be RESULT_CANCELED

capnjimbo  Aug 13, 2011 
PDF Page 257
2nd paragraph

The request code passed into startActivityForResult is returned along with the request code set before finish was called. I think that it should be: "The request code passed into startActivityForResult is returned along with the result code.... "

Alessandro Boggiano  Sep 02, 2011 
PDF Page 261
Save Magnets Solution

The method addTimeRecord(TimeRecord) is not defined anywhere. Also, if such method is applied on the class, should the data structure times defined as static ?

Alessandro Boggiano  Sep 02, 2011 
PDF Page 271
First paragraph, Last line

The last sentence of the first paragraph states "Then using a database API, your app would connect to the database and query or addsdata to the database." This looks like it should be "add data" not "addsdata".

ecsa0014  Sep 16, 2011 
PDF Page 276
code block

The inner class definition should be private static class TaskOpenHelper extends SQLiteOpenHelper { public TaskOpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } } with whatever's needed for the onCreate and onUpgrade methods (haven't gone into those yet).

jwenting  Sep 08, 2011 
PDF Page 284
Chapter 7 (lists and adapters) >> Page 284 (Sharpen your pencil) >> "Below is the TimeTrackerAdapter code" creation code

Hi, I noticed a piece of code which can lead to infinite loop. Here is the location: Chapter 7 (lists and adapters) >> Page 284 (Sharpen your pencil) >> "Below is the TimeTrackerAdapter code" creation code public Object getItem(int index) { return getItem(index); } The above code is recursively calling itself. The correct code should be: public Object getItem(int index) { return times.get(index); } Thanks, Raghav http://codeasp.net/

Raghav Khunger  Oct 05, 2012 
PDF Page 284
In 284 page TimeTrackerAdapter class is missing "addTimeRecord" method which is used later on 338 Page

In 284 page TimeTrackerAdapter class is missing "addTimeRecord" method which is used later on 338 Page Used in 338 page : timeTrackerAdapter.addTimeRecord( new TimeRecord(time, notes)); There should be "addTimeRecord" method in TimeTrackerAdapter with this code: public void addTimeRecord(TimeRecord timeRecord) { times.add(timeRecord); }

Raghav Khunger  Oct 05, 2012 
PDF Page 311
bottom

chapter # listed in the page footer is incorrect. Should be 9 rather than 67.

jwenting  Sep 29, 2011 
PDF Page 317
Chapter 7 (lists and adapters) >> 317 page >> Show the menu

Chapter 7 (lists and adapters) >> 317 page >> Show the menu Semicolon missing : super.onCreateOptionsMenu(m) "menu" should be replaced with "m" : R.menu.time_list_menu, menu ); 322 page >> Launching a new Activity Magnets Solution Semicolon missing: startActivity(intent)

Raghav Khunger  Oct 05, 2012 
PDF Page 323
end of page

<activity android:name=”.AddTimeActivity”> </activity> MUST between <application> and </application> tag. If not, will always notice: "No activity found". I think this error is really important, many newbie cannot overcome this error (if they don't have good google skill) :(

Huynh Quang Thao  Feb 27, 2012 
PDF Page 326
Chapter 7 (lists and adapters) >> 326 page >> Implement the button actions

Chapter 7 (lists and adapters) >> 326 page >> Implement the button actions Variable missing: Intent = new Intent(this, TimeTracker.class); It should be: Intent intent = new Intent(this, TimeTracker.class);

Raghav Khunger  Oct 05, 2012 
PDF Page 503
1st and 2nd code snippet

the stated is android:background=”null” the right is android:background=”@null”

mamdouhalshamy  Oct 20, 2011