2014-03-13 30 views
0

當我啓動我的活動時,我不斷收到nullpointerexception。我試圖讓一個tic tac toe遊戲的分數顯示在TextView的Action Bar中,但每當我嘗試設置onPrepareOptionsMenu()方法中的文本時,應用程序都會崩潰。實際上,我使用一個ActionView將這個小部件放在Action Bar中。爲什麼動態修改ActionBar中的TextView時出現nullpointerexception?

下面是代碼在我RES /菜單/ 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> 

而且我RES /佈局/ 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> 

最後,一片段的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); 
} 

這裏是我的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) 

謝謝! whaen從一個活性起着移動到另一個只檢查

您還沒有初始化的東西把整個的.java代碼

是什麼humanScore,computerScore變量

+3

請把你的日誌,當你有錯誤。 – Amadas

+0

對不起,我只是把它。 – aindurti

回答

1

+0

但是應該'scoreItem'仍然帶有'TextView'呢?我如何創建一個自定義的'ActionView',我沒有創建一個? – aindurti

0

空指針異常來當意圖問題是有MenuItem#getActionView()將返回null,除非您已設置自定義ActionView

您應該做的是使用scoreItem.setTitle()

+0

這裏沒有處理意圖。在添加ActionView之前,該應用程序完全適用於多個活動。 – aindurti

+0

這是618行 –

+0

它是'scoreText.setText(「P1:」+ humanScore +「P2:」+ computerScore);' – aindurti

相關問題