ActionBar выдает исключение NullPointerException

Я не мог понять это. Я настраиваю свой ActionBar (и да, мое приложение для 3.0+). Код отлично работает на устройстве (используя Motorola xoom, если это имеет значение). Но когда я запускаю это на эмуляторе, он выдает NPE. Это мой код для ActionBar

/**
 * Customizes Action bar sets background color and assigns a layout to it
 */
private void customActionBar() {
    Log.v(TAG, "customizing ActionBar Entry");
    ActionBar actionBar = getActionBar();
    Log.v(TAG, "customizing ActionBar : "+actionBar.toString());
            //This is where i get NPE
    actionBar.setBackgroundDrawable(new ColorDrawable(Color
            .parseColor(Constants.COLOR)));
    Log.v(TAG, "customizing ActionBar -Background color : ");

    LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.custom_action, null);
    // lay.setLayoutParams(new ActionBar.LayoutParams(
    // android.app.ActionBar.LayoutParams.MATCH_PARENT,
    // android.app.ActionBar.LayoutParams.MATCH_PARENT));
    actionBar.setCustomView(view);
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
    Log.v(TAG, "customizing ActionBar Exit");
}

РЕДАКТИРОВАТЬ: логкэт

V/>>> FullPdfViewerActivity(438): customizing ActionBar Entry
D/AndroidRuntime(438): Shutting down VM
W/dalvikvm(438): threadid=1: thread exiting with uncaught exception (group=0x40014760)
E/AndroidRuntime(438): FATAL EXCEPTION: main
E/AndroidRuntime(438): java.lang.RuntimeException: Unable to start activity                                 
ComponentInfo{com.test.android.tester/com.test.android.tester.core.AwesomePagerActivity}:          java.lang.NullPointerException
E/AndroidRuntime(438):  at     android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1736)
E/AndroidRuntime(438):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752)
E/AndroidRuntime(438):  at android.app.ActivityThread.access$1500(ActivityThread.java:123)
E/AndroidRuntime(438):  at    android.app.ActivityThread$H.handleMessage(ActivityThread.java:993)
E/AndroidRuntime(438):  at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(438):  at android.os.Looper.loop(Looper.java:126)
E/AndroidRuntime(438):  at android.app.ActivityThread.main(ActivityThread.java:3997)
E/AndroidRuntime(438):  at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(438):  at java.lang.reflect.Method.invoke(Method.java:491)
E/AndroidRuntime(438):  at   com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
E/AndroidRuntime(438):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
E/AndroidRuntime(438):  at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(438): Caused by: java.lang.NullPointerException
E/AndroidRuntime(438):  at com.test.android.tester.core.AwesomePagerActivity.customActionBar(AwesomePagerActivity.java:227)
E/AndroidRuntime(438):  at com.test.android.tester.core.AwesomePagerActivity.onCreate(AwesomePagerActivity.java:187)
E/AndroidRuntime(438):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
E/AndroidRuntime(438):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700)
E/AndroidRuntime(438):  ... 11 more

Я вызываю это из моего onCreate(). Меня беспокоит, будет ли это работать для других устройств??

ТИА


person Its not blank    schedule 14.12.2011    source источник
comment
Не могли бы вы предоставить logcat?   -  person Kartik Domadiya    schedule 14.12.2011
comment
раньше это было setBackgroundDrawable. Но когда я использовал toString(), он показывал NPE. Там в комментарии   -  person Its not blank    schedule 14.12.2011
comment
Как выглядит Constants.COLOR?   -  person LuxuryMode    schedule 14.12.2011
comment
это шестнадцатеричное значение для цвета, например #c3c3c3, и это строка. Но я получаю NPE для actionBar.toString()   -  person Its not blank    schedule 14.12.2011
comment
ребята, вы можете попробовать это на своем эмуляторе для 3.0...   -  person Its not blank    schedule 14.12.2011


Ответы (2)


Я думаю, что getActionBar() возвращает null. Я видел такое поведение, когда getActionBar() вызывался до setContentView() активности, но только на Android 3.0 и 3.1, на Android 3.2 порядок не имеет значения. Попробуйте вызвать setContentView перед настройкой панели действий

person Ilya Izhovkin    schedule 14.12.2011
comment
Вы сделали мой день ... но до сих пор не поняли, как это работает для устройства. Нет ли чего-то, что называется независимостью от платформы ... в любом случае, спасибо - person Its not blank; 14.12.2011

Имейте в виду, что в некоторых случаях вам может потребоваться выполнить какие-либо вызовы в onActivityCreated, поскольку представление может быть не готово.

person Kc Gibson    schedule 29.12.2014