I keep getting a nullpointerexception when I launch my activity. I'm trying to get the score for a tic tac toe game to show up on the Action Bar in a TextView, but whenever I try to set the text in the onPrepareOptionsMenu() method, the application crashes. I am, in fact, using an ActionView to put the widget in the Action Bar.

Here is the code in my res/menu/score_show.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:yourapp="http://schemas.android.com/apk/res-auto" >

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_settings"/>
    <item
        android:id="@+id/scoreTextItem"
        yourapp:showAsAction="always|withText"
        android:actionViewClass="android.widget.TextView"
        yourapp:actionViewClass="@layout/score_text"/>

</menu>

And my res/layout/score_text.xml:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scoreText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true" >


</TextView>

And finally, a snippet of the TicTacToeActivity.java:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.score_show, menu);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    scoreItem = menu.findItem(R.id.scoreTextItem);
    TextView scoreText = (TextView)MenuItemCompat.getActionView(scoreItem);
    scoreText.setText("P1: " + humanScore + " P2: " + computerScore);
    supportInvalidateOptionsMenu();
    return super.onPrepareOptionsMenu(menu);
}

Here is my logcat

03-13 00:40:09.244: D/AndroidRuntime(1127): Shutting down VM
03-13 00:40:09.248: E/AndroidRuntime(1127): FATAL EXCEPTION: main
03-13 00:40:09.248: E/AndroidRuntime(1127): Process: com.packagename.tictactoe, PID: 1127
03-13 00:40:09.248: E/AndroidRuntime(1127): java.lang.NullPointerException
03-13 00:40:09.248: E/AndroidRuntime(1127):     at com.packagename.tictactoe.TicTacToeActivity.onPrepareOptionsMenu(TicTacToeActivity.java:618)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at android.app.Activity.onPreparePanel(Activity.java:2556)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at android.support.v4.app.FragmentActivity.onPrepareOptionsPanel(FragmentActivity.java:491)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at android.support.v7.app.ActionBarActivity.superOnPrepareOptionsPanel(ActionBarActivity.java:240)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at android.support.v7.app.ActionBarActivityDelegate.onPrepareOptionsPanel(ActionBarActivityDelegate.java:160)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at android.support.v7.app.ActionBarActivity.onPrepareOptionsPanel(ActionBarActivity.java:212)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at android.support.v4.app.FragmentActivity.onPreparePanel(FragmentActivity.java:480)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at android.support.v7.app.ActionBarActivity.superOnPreparePanel(ActionBarActivity.java:236)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at android.support.v7.app.ActionBarActivityDelegateICS.onPreparePanel(ActionBarActivityDelegateICS.java:155)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at android.support.v7.app.ActionBarActivity.onPreparePanel(ActionBarActivity.java:204)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.onPreparePanel(ActionBarActivityDelegateICS.java:290)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:464)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:800)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:221)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at android.view.Choreographer.doCallbacks(Choreographer.java:574)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at android.view.Choreographer.doFrame(Choreographer.java:543)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at android.os.Handler.handleCallback(Handler.java:733)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at android.os.Handler.dispatchMessage(Handler.java:95)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at android.os.Looper.loop(Looper.java:136)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at android.app.ActivityThread.main(ActivityThread.java:5017)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at java.lang.reflect.Method.invokeNative(Native Method)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at java.lang.reflect.Method.invoke(Method.java:515)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-13 00:40:09.248: E/AndroidRuntime(1127):     at dalvik.system.NativeStart.main(Native Method)

Thank You!

有帮助吗?

解决方案

MenuItem#getActionView() will return null unless you have set a custom ActionView

What you should be doing is using scoreItem.setTitle()

其他提示

NullPointer exception comes when intent problem is there whaen moving from one avtivity to another just check that

You have not initialized something put whole .java code

what is humanScore , computerScore variables

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top