2011-03-03 41 views
0

我的应用程序运行良好,直到我下面的代码添加到选项菜单添加到我的主要活动:RuntimeException的与Android OptionsMenu

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.wantlist_menu, menu); 
     return true; 
} 

菜单资源如下所示:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:enabled="true" android:visible="true" android:id="@+id/clearImageCashe" android:title="@string/clearImageCache"></item> 
</menu> 

一切正在编译,但我得到以下NullpointerException:

03-03 19:11:09.001: ERROR/AndroidRuntime(341): java.lang.RuntimeException: Unable to start activity  ComponentInfo{de.kosmowski.discogs.wants/de.kosmowski.discogs.wants.activities.wantlist}:  java.lang.NullPointerException 
03-03 19:11:09.001: ERROR/AndroidRuntime(341):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 
03-03 19:11:09.001: ERROR/AndroidRuntime(341):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
03-03 19:11:09.001: ERROR/AndroidRuntime(341):  at android.app.ActivityThread.access$2200(ActivityThread.java:119) 
03-03 19:11:09.001: ERROR/AndroidRuntime(341):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 
03-03 19:11:09.001: ERROR/AndroidRuntime(341):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-03 19:11:09.001: ERROR/AndroidRuntime(341):  at android.os.Looper.loop(Looper.java:123) 
03-03 19:11:09.001: ERROR/AndroidRuntime(341):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
03-03 19:11:09.001: ERROR/AndroidRuntime(341):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-03 19:11:09.001: ERROR/AndroidRuntime(341):  at java.lang.reflect.Method.invoke(Method.java:521) 
03-03 19:11:09.001: ERROR/AndroidRuntime(341):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
03-03 19:11:09.001: ERROR/AndroidRuntime(341):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
03-03 19:11:09.001: ERROR/AndroidRuntime(341):  at dalvik.system.NativeStart.main(Native Method) 
03-03 19:11:09.001: ERROR/AndroidRuntime(341): Caused by: java.lang.NullPointerException 
03-03 19:11:09.001: ERROR/AndroidRuntime(341):  at de.kosmowski.discogs.wants.activities.wantlist.onCreate(wantlist.java:49) 
03-03 19:11:09.001: ERROR/AndroidRuntime(341):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
03-03 19:11:09.001: ERROR/AndroidRuntime(341):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 
03-03 19:11:09.001: ERROR/AndroidRuntime(341):  ... 11 more 

它说会有b E中的空指针异常在

Caused by: java.lang.NullPointerException 
03-03 19:11:09.001: ERROR/AndroidRuntime(341):  at de.kosmowski.discogs.wants.activities.wantlist.onCreate(wantlist.java:49) 

但在这行代码只是工作罚款之前,如果我注释掉,出现在下面的一些行同样的错误。这对我来说毫无意义。

我只是不知道这里发生了什么。

最后但并非最不重要的完整活动类(不含进口):

public class wantlist extends Activity implements OnClickListener { 
/** Called when the activity is first created. */ 

ArrayList<Want> wants = new ArrayList<Want>(); 

@Override 
public void onCreate(Bundle savedInstanceState) {   

    wants.add(new Want("Want1")); 
    wants.add(new Want("Want2")); 
    wants.add(new Want("Want3")); 
    wants.add(new Want("Want4")); 
    wants.add(new Want("Want5")); 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.main); 

    ListView lv = (ListView) findViewById(R.id.WantList); 
    ImageButton b = (ImageButton) findViewById(R.id.searchbutton); 
    b.setOnClickListener(this); //NullPointerException here 


    lv.setAdapter(new WantAdapter(this, 
      R.layout.lplistitem, wants)); 
    lv.setTextFilterEnabled(true); 

} 

public void onClick(View v) { 
    onSearchRequested(); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.wantlist_menu, menu); 
     return true; 
} 

}

只是可以肯定这里的main.xml中提前

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
<RelativeLayout 
android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
> 
<ImageButton android:gravity="right" android:layout_alignParentRight="true" android:src="@drawable/searchbutton" android:text="@string/search" android:id="@+id/searchbutton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="visible"></ImageButton> 
</RelativeLayout> 

<ListView android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/WantList"></ListView> 
</LinearLayout> 

感谢。

+0

什么是第49行? – 2011-03-03 18:29:53

+0

我用“// NullPointerException here”标记了它的b.setOnClickListener(this)行。当我评论这条线。异常将在下一行代码等等...我不认为这是真的与这条线有关。 – Chris 2011-03-03 18:34:44

回答

0

删除类R.java并让Eclipse重新生成它解决了它!

我想因为任何原因,R.java对某些id感到困惑。

0

在main.xml中是否存在编号searchbutton

如果在布局中找不到ID,则会返回空指针。如果该编号存在于另一个布局文件中,编译器将不会捕获该文件。

+0

是的。我将main.xml添加到问题中。 – Chris 2011-03-03 18:41:37

+0

如何在onCreate()中设置断点并逐步找出哪一行实际上导致了问题? – 2011-03-03 19:59:31