소스 코드는
package com.paad.todolist;

import android.app.Activity;

import java.util.ArrayList;

import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

import android.view.Menu;
import android.view.MenuItem;
import android.view.ContextMenu;
import android.widget.AdapterView;

 

 

public class ToDoList extends Activity {
    /** Called when the activity is first created. */
 
 private ArrayList<String> todoItems;
 private ListView myListView;
 private EditText myEditText;
 private ArrayAdapter<String> aa;
 
 
 static final private int ADD_NEW_TODO=Menu.FIRST;
 static final private int REMOVE_TODO=Menu.FIRST+1;
 
 private boolean addingNew =false;
 
 public boolean onCtrateOptionMenu(Menu menu){
  super.onCreateOptionsMenu(menu);
  
  MenuItem itemAdd = menu.add(0,ADD_NEW_TODO,Menu.NONE,R.string.add_new);
  MenuItem itemRem = menu.add(0,REMOVE_TODO,Menu.NONE,R.string.remove);
  
 // itemAdd.setIcon(R.drawable.minus);
 // itemRem.setIcon(R.drawable.minus);
  
  itemAdd.setShortcut('0', 'a');
  itemRem.setShortcut('1', 'r');
  
  return true;
  
 }
 
 
 
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        setContentView(R.layout.main);
        myListView =(ListView)findViewById(R.id.myListView);
        myEditText=(EditText)findViewById(R.id.myEditText);
       
        todoItems = new ArrayList<String>();
       
       
        int resID =R.layout.todolist_item;
       
      
       
        aa= new ArrayAdapter<String>(this,resID,todoItems);
       
        myListView.setAdapter(aa);
       
        myEditText.setOnKeyListener(new OnKeyListener(){
         public boolean onKey(View v,int keyCode,KeyEvent event){
          if(event.getAction()==KeyEvent.ACTION_DOWN)
           if(keyCode==KeyEvent.KEYCODE_DPAD_CENTER){
            todoItems.add(0,myEditText.getText().toString());
            myEditText.setText("");
            aa.notifyDataSetChanged();
            cancelAdd();
           
            return true;
           }
          return false;
         
         }
        });
       
       registerForContextMenu(myListView);
    }
   
    public void conCreateContextMenu(ContextMenu menu,View v,ContextMenu.ContextMenuInfo menuInfo){
     
     super.onCreateContextMenu(menu, v, menuInfo);
     
     menu.setHeaderTitle("Selected TO DO");
     menu.add(0,REMOVE_TODO,menu.NONE,R.string.remove);
     
     
    }
    public boolean onPrepareOptionsMenu(Menu menu){
     super.onPrepareOptionsMenu(menu);
     
     int idx = myListView.getSelectedItemPosition();
     
     String removeTitle = getString(addingNew ? R.string.cancel : R.string.remove);
     
     
     MenuItem removeItem = menu.findItem(REMOVE_TODO);
     removeItem.setTitle(removeTitle);
     removeItem.setVisible(addingNew || idx > -1);
     
     return true;
    }
    public boolean onOptionsItemSelected(MenuItem item){
     super.onOptionsItemSelected(item);
     int index = myListView.getSelectedItemPosition();
     
     switch(item.getItemId()){
     case(REMOVE_TODO):{
      if(addingNew){
       cancelAdd();
      }
      else{
       removeItem(index);
      }
      return true;
     }
     case(ADD_NEW_TODO):{
      addNewItem();
      return true;
     }
     
     }
     return false;
    }
    public boolean onContextItemSelected(MenuItem item){
     
     super.onContextItemSelected(item);
     switch(item.getItemId()){
     case(REMOVE_TODO):{
      AdapterView.AdapterContextMenuInfo menuInfo;
      menuInfo =(AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
      
      int index = menuInfo.position;
      
      removeItem(index);
      return true;
     }
     }
     return false;
    }
    private void cancelAdd(){
     addingNew=false;
     myEditText.setVisibility(View.GONE);
    }
    private void addNewItem(){
     addingNew=true;
     myEditText.setVisibility(View.VISIBLE);
     myEditText.requestFocus();
    }
    private void removeItem(int _index){
     todoItems.remove(_index);
     aa.notifyDataSetChanged();
     
    }
   
}
로그캣 에러 표시는 이렇게 나왔습니다.

10-21 10:56:17.867: ERROR/AndroidRuntime(741): Uncaught handler: thread main exiting due to uncaught exception
10-21 10:56:17.897: ERROR/AndroidRuntime(741): java.lang.NullPointerException
10-21 10:56:17.897: ERROR/AndroidRuntime(741):     at com.paad.todolist.ToDoList.onPrepareOptionsMenu(ToDoList.java:113)
10-21 10:56:17.897: ERROR/AndroidRuntime(741):     at android.app.Activity.onPreparePanel(Activity.java:2065)
10-21 10:56:17.897: ERROR/AndroidRuntime(741):     at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:429)
10-21 10:56:17.897: ERROR/AndroidRuntime(741):     at com.android.internal.policy.impl.PhoneWindow.onKeyDownPanel(PhoneWindow.java:664)
10-21 10:56:17.897: ERROR/AndroidRuntime(741):     at com.android.internal.policy.impl.PhoneWindow.onKeyDown(PhoneWindow.java:1278)
10-21 10:56:17.897: ERROR/AndroidRuntime(741):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1689)
10-21 10:56:17.897: ERROR/AndroidRuntime(741):     at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2329)
10-21 10:56:17.897: ERROR/AndroidRuntime(741):     at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2299)
10-21 10:56:17.897: ERROR/AndroidRuntime(741):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1621)
10-21 10:56:17.897: ERROR/AndroidRuntime(741):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-21 10:56:17.897: ERROR/AndroidRuntime(741):     at android.os.Looper.loop(Looper.java:123)
10-21 10:56:17.897: ERROR/AndroidRuntime(741):     at android.app.ActivityThread.main(ActivityThread.java:4203)
10-21 10:56:17.897: ERROR/AndroidRuntime(741):     at java.lang.reflect.Method.invokeNative(Native Method)
10-21 10:56:17.897: ERROR/AndroidRuntime(741):     at java.lang.reflect.Method.invoke(Method.java:521)
10-21 10:56:17.897: ERROR/AndroidRuntime(741):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
10-21 10:56:17.897: ERROR/AndroidRuntime(741):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
10-21 10:56:17.897: ERROR/AndroidRuntime(741):     at dalvik.system.NativeStart.main(Native Method)

/////////////////////////////////////////////////////////////

빨간책 챕터 4에 있는 TodoList 메뉴 예제 그대로 한건데 에러가 발생하네요.