Pergunta

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!

Foi útil?

Solução

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

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

Outras dicas

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top