현재까지 발견된 위 책의 오탈자 정보와 오류 사항 그리고 보다 매끄러운 문장을 위해 수정한 내용들입니다. 불편을 끼쳐드려 죄송합니다.
혹시 이 외의 오탈자 정보를 발견하시는 분이 계시면 출판사 메일 jeipub골뱅이gmail.com이나 역자 메일 chosungmann골뱅이daum.net으로 연락주시면 고맙겠습니다.
114쪽 코드 3-12 밑에서 다섯 번째 줄(원서오류)(임종호 님 제공)
// onCreate가 종료된 후 호출된다. UI 상태 복구에 사용한다.
==>
// onStart가 종료된 후 호출된다. UI 상태 복구에 사용한다.
이에 따라 그림 3-7도 아래와 같이 수정되어야 합니다.
2쇄본 오탈자
114쪽 그림 3-7에서(원서오류)(송호진 님 제공)
Activity.onCreate 다음에 있는 Activity.onSaveInstanceState ==> Activity.onRestoreInstanceState
Activity.onResume 다음에 있는 Activity.onRestoreInstanceState ==> Activity.onSaveInstanceState
9장 404쪽과 408쪽 전부(인쇄오류)
1쇄본 오탈자
아래의 소스 코드 오류들을 수정한 파일은 다음에서 받으실 수 있습니다.
==> http://jpub.tistory.com/102 의 소스 코드(역자 제공)
이 블로그에서 소스코드 들여쓰기는 서체 문제로 인해 글자 하나와 스페이스 하나가 일대일 대응이 되지 않고 있습니다.
아래 내용을 복사하여 메모장에 붙여 보시면 정확하게 보실 수 있음을 알려 드립니다.
185페이지 밑에서 5번째 줄부터 186페이지 위에서 3번째 줄까지 볼드 처리(역자 제공)
@Override
public void onCreateContextMenu(ContextMenu menu,
View v,
ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("할 일 아이템 선택");
menu.add(0, REMOVE_TODO, Menu.NONE, R.string.remove);
}
==>
@Override
public void onCreateContextMenu(ContextMenu menu,
View v,
ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("할 일 아이템 선택");
menu.add(0, REMOVE_TODO, Menu.NONE, R.string.remove);
}
187페이지 위에서 19번째 줄은 볼드처리를 해제(역자 제공)
registerForContextMenu(myListView); ==> registerForContextMenu(myListView);
188페이지 밑에서 11, 12번째 줄 2줄을 볼드처리 해제(역자 제공)
AdapterView.AdapterContextMenuInfo menuInfo;
menuInfo =(AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
==>
AdapterView.AdapterContextMenuInfo menuInfo;
menuInfo =(AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
232페이지 위에서 6번째 줄 코드 수정(역자 제공)
create = _create; ==> created = _created;
263페이지 위에서 13번째줄 부터 4줄을 볼드 처리(역자 제공)
<string name="auto_update_prompt">자동 업데이트?</string>
<string name="update_freq_prompt">업데이트 빈도</string>
<string name="min_quake_mag_prompt">최소 진도</string>
<string name="menu_preferences">환경설정</string>
==>
<string name="auto_update_prompt">자동 업데이트?</string>
<string name="update_freq_prompt">업데이트 빈도</string>
<string name="min_quake_mag_prompt">최소 진도</string>
<string name="menu_preferences">환경설정</string>
272페이지 위에서 10번째 줄을 볼드 처리(역자 제공)
}
}
==>
}
}
311페이지 위에서 3번째줄 부터 4줄을 볼드 처리 해제(역자 제공)
toDoDBAdapter = new ToDoDBAdapter(this);
// 데이터베이스를 개방 또는 생성한다.
toDoDBAdapter.open();
populateTodoList();
==>
toDoDBAdapter = new ToDoDBAdapter(this);
// 데이터베이스를 개방 또는 생성한다.
toDoDBAdapter.open();
populateTodoList();
322페이지 위에서 11번째 줄 코드 수정(역자 제공)
String where, String[] wArgs) {
==>
String where, String[] whereArgs) {
323페이지 위에서 18번째 줄 코드 수정(김성호 님 제공)
+ KEY_MAGNITUDE + " FLOAT), "
==>
+ KEY_MAGNITUDE + " FLOAT, "
330페이지 밑에서 3번째 줄을 볼드 처리(역자 제공)
loadQuakesFromProvider();
==>
loadQuakesFromProvider();
361페이지 밑에서 4, 5번째 줄 2줄을 볼드 처리(역자 제공)
myLocationText.setText("현재 위치:\n" +
latLongString + "\n" + addressString);
==>
myLocationText.setText("현재 위치:\n" +
latLongString + "\n" + addressString);
405페이지 밑에서 12번째 줄 코드 수정(역자 제공)
"yyyy-MM-dd 'T 'hh:mm:ss 'Z '"
==>
"yyyy-MM-dd'T'hh:mm:ss'Z'"
407페이지 위에서 3번째 줄부터 408페이지 위에서 13번째 줄까지의 모든 코드를 아래 코드로 대체(역자 제공)
private Timer updateTimer;
private int minimumMagnitude = 0;
private boolean autoUpdate = false;
private int updateFreq = 0;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// 공유 환경설정을 얻어온다.
Context context = getApplicationContext();
SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(context);
autoUpdate =
prefs.getBoolean(Preferences.PREF_AUTO_UPDATE, false);
minimumMagnitude =
Integer.parseInt(prefs.getString(Preferences.PREF_MIN_MAG, "0"));
updateFreq =
Integer.parseInt(prefs.getString(Preferences.PREF_UPDATE_FREQ, "0"))
updateTimer.cancel();
if(autoUpdate) {
updateTimer = new Timer("earthquakeUpdates");
updateTimer.scheduleAtFixedRate(new TimerTask() {
public void run() {
refreshEarthquakes();
}
}, 0, updateFreq*60*1000);
}
refreshEarthquakes();
return Service.START_STICKY;
};
@Override
public void onCreate() {
updateTimer = new Timer("earthquakeUpdates");
}
450페이지 4번째 줄(김성호 님 제공)
pdateFreq*60*1000;
==>
updateFreq*60*1000;
477페이지 7.1번 문장 수정(역자 제공)
먼저 EarthquakeService에 있는 doRefreshEarthquakes 메서드를 수정해 작업 완료 후 인텐트를 방송하도록 업데이트한다.
==>
먼저 EarthquakeService에 있는 EarthquakeLookupTask의 onPostExecute 메서드를 수정해 작업 완료 후 인텐트를 방송하도록 업데이트한다.
477페이지 7.1번에 딸린 코드 전체(역자 제공)
public static String QUAKES_REFRESHED =
"com.paad.earthquake.QUAKES_REFRESHED";
public void doRefreshEarthquakes() {
[ ... 기존 doRefreshEarthquakes 코드 ... ]
sendBroadcast(new Intent(QUAKES_REFRESHED));
}
==>
public static String QUAKES_REFRESHED =
"com.paad.earthquake.QUAKES_REFRESHED";
protected void onPostExecute(Void result) {
sendBroadcast(new Intent(QUAKES_REFRESHED));
stopSelf();
}
485페이지 첫 번째 줄에서(김성호 님 제공)
EarthquakeLiveFolder라는 이름의…
==>
EarthquakeLiveFolders라는 이름의…
493페이지 밑에서 10번째 줄 코드 수정 및 볼드처리(역자 제공)
private static int SEARCH = 3;
==>
private static final int SEARCH = 4;
495페이지 밑에서 17번 째 줄 코드 수정(역자 제공)
String searchQuery = Uri.withAppendedPath(EarthquakeProvider.SEARCH_URI,
searchTerm);
==>
Uri searchQuery = Uri.withAppendedPath(EarthquakeProvider.SEARCH_URI,
searchTerm);
495페이지 밑에서 3번째 줄 코드 수정(역자 제공)
android:label="Earthquake Search">
==>
android:label="지진 정보 검색">
564페이지 밑에서 7,8,9번째 줄 세 줄 볼드처리 해제(역자 제공)
if (message.getMessageBody().toLowerCase().contains
(queryString))
requestReceived(message.getOriginatingAddress());
==>
if (message.getMessageBody().toLowerCase().contains
(queryString))
requestReceived(message.getOriginatingAddress());
564페이지 밑에서 1번 째 줄 볼드처리 해제(역자 제공)
public void requestReceived(String _from) {}
==>
public void requestReceived(String _from) {}
573페이지 밑에서 9,10,11번 째 줄 세 줄 볼드처리(역자 제공)
Spinner respondForSpinner;
CheckBox locationCheckbox;
EditText responseTextBox;
==>
Spinner respondForSpinner;
CheckBox locationCheckbox;
EditText responseTextBox;
576페이지 위에서 18번째 줄 볼드 처리(역자 제공)
private void setAlarm(int respondForIndex) {}
==>
private void setAlarm(int respondForIndex) {}
579페이지 밑에서 4번째 줄 코드 수정(역자 제공)
String autoRespondPref = getString(R.string.autoRespondPref)
==>
String autoRespondPref = getString(R.string.autoRespondPref);
604페이지 위에서 1번째 줄부터 15줄 볼드 처리(역자 제공)
return null;
}
@Override
protected void onPostExecute(BluetoothSocket result) {
if (result != null)
switchUI();
}
};
acceptThread.execute(resultCode);
} catch (IOException e) {
Log.d("BLUETOOTH", e.getMessage());
}
}
}
}
==>
return null;
}
@Override
protected void onPostExecute(BluetoothSocket result) {
if (result != null)
switchUI();
}
};
acceptThread.execute(resultCode);
} catch (IOException e) {
Log.d("BLUETOOTH", e.getMessage());
}
}
}
}
674페이지 밑에서 7-15번째 줄 9줄 볼드 처리(역자 제공)
Animation slideInLeft;
Animation slideOutLeft;
Animation slideInRight;
Animation slideOutRight;
Animation slideInTop;
Animation slideOutTop;
Animation slideInBottom;
Animation slideOutBottom;
TextView myTextView;
==>
Animation slideInLeft;
Animation slideOutLeft;
Animation slideInRight;
Animation slideOutRight;
Animation slideInTop;
Animation slideOutTop;
Animation slideInBottom;
Animation slideOutBottom;
TextView myTextView;
674페이지 밑에서 2번째 줄부터 675페이지 위에서 15번째 줄까지 볼드 처리(역자 제공)
slideInLeft = AnimationUtils.loadAnimation(this,
R.anim.slide_left_in);
slideOutLeft = AnimationUtils.loadAnimation(this,
R.anim.slide_left_out);
slideInRight = AnimationUtils.loadAnimation(this,
R.anim.slide_right_in);
slideOutRight = AnimationUtils.loadAnimation(this,
R.anim.slide_right_out);
slideInTop = AnimationUtils.loadAnimation(this,
R.anim.slide_top_in);
slideOutTop = AnimationUtils.loadAnimation(this,
R.anim.slide_top_out);
slideInBottom = AnimationUtils.loadAnimation(this,
R.anim.slide_bottom_in);
slideOutBottom = AnimationUtils.loadAnimation(this,
R.anim.slide_bottom_out);
myTextView = (TextView)findViewById(R.id.myTextView);
==>
slideInLeft = AnimationUtils.loadAnimation(this,
R.anim.slide_left_in);
slideOutLeft = AnimationUtils.loadAnimation(this,
R.anim.slide_left_out);
slideInRight = AnimationUtils.loadAnimation(this,
R.anim.slide_right_in);
slideOutRight = AnimationUtils.loadAnimation(this,
R.anim.slide_right_out);
slideInTop = AnimationUtils.loadAnimation(this,
R.anim.slide_top_in);
slideOutTop = AnimationUtils.loadAnimation(this,
R.anim.slide_top_out);
slideInBottom = AnimationUtils.loadAnimation(this,
R.anim.slide_bottom_in);
slideOutBottom = AnimationUtils.loadAnimation(this,
R.anim.slide_bottom_out);
myTextView = (TextView)findViewById(R.id.myTextView);
'오탈자 정보' 카테고리의 다른 글
[실전 앱 프로젝트 안드로이드 게임 개발편]_오탈자 (2) | 2011.04.18 |
---|---|
[마로의 꿈: 액션스크립트 3.0으로 배우는 소셜 게임 프로그래밍]_오탈자 (4) | 2011.01.04 |
[핵심만 골라 배우는 스마트폰 웹 개발]_오탈자 (2) | 2010.08.07 |
[안드로이드 2 마스터 북]_오탈자 (0) | 2010.08.06 |
[오브젝티브-C로 배우는 아이폰 게임 개발]_오탈자 (4) | 2010.05.18 |