Исключение Android TabActivity NullPointerException

#android #tabactivity

#Android #tabactivity

Вопрос:

Проблемы с TabActivity…

Я получаю это исключение

     java.lang.NullPointerException
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1816)
    at android.app.ActivityThread.startActivityNow(ActivityThread.java:1651)
    at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
    at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
    at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:656)
    at android.widget.TabHost.setCurrentTab(TabHost.java:326)
    at android.widget.TabHost.addTab(TabHost.java:216)
    at home.android.yahtzee.activities.GameActivity.onCreate(GameActivity.java:36)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1780)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1837)
    at android.app.ActivityThread.access$1500(ActivityThread.java:132)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1033)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:143)
    at android.app.ActivityThread.main(ActivityThread.java:4196)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    at dalvik.system.NativeStart.main(Native Method)
  

с помощью этого кода

 public class GameActivity extends TabActivity {

    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.tab_handler);

        Gson gson = new Gson();
        Player player = WhoIsPlayingDialog.playerSelected;
        Resources res = getResources(); // Resource object to get Drawables
        TabHost tabHost = getTabHost();
        tabHost.setup();
        tabHost.setTag(this);
        TabHost.TabSpec spec = tabHost.newTabSpec(player.getName());
        Intent intent = new Intent(GameActivity.this, GamePlayerActivity.class);
        intent.putExtra("player", gson.toJson(player));
        spec.setContent(intent);
        spec.setIndicator(player.getName(), res.getDrawable(player.getDroid()));
        tabHost.addTab(spec); <============ Line 36.
    }
}
  

И я не знаю почему. Кто-нибудь может мне сказать?

Ответ №1:

Во-первых, вам не нужно вызывать tabHost.setup() , когда вы уже вызвали getTabHost().

Во-вторых, вы, скорее всего, получите исключение NullPointerException, потому что либо res.getDrawable(player.getDroid()) , либо player.getName() возвращает null.

Комментарии:

1.Спасибо за ваш ответ. Я удалю tabHost.setup() . Я проверил, и res.getDrawable(player.getDroid()) player.getName() они не равны нулю.

2. Указали ли вы свой TabHost с помощью android:id="@ android:id/tabhost" в своем файле макета? Вы объявили GamePlayerActivity.class в файле манифеста?

3. Попробуйте использовать getApplicationContext() в качестве первого аргумента, переданного конструктору Intent

Ответ №2:

Попробуйте использовать его как:

 ...    
TabHost.TabSpec spec;
Intent intent; 

intent = new Intent().setClass(getApplicationContext(), GamePlayerActivity.class);
spec = tabHost.newTabSpec(player.getName()).setIndicator(player.getName(),res.getDrawable(player.getDroid())).setContent(intent); 
tabHost.addTab(spec);
  

и удалить tabHost.setup();

Ответ №3:

Ошибка в строке GameActivity.java:36 , здесь нет номера строки. проверьте, что в этой строке равно null . на широком уровне я думаю, что P layer player = WhoIsPlayingDialog.playerSelected; может быть нулевым, если u не инициализировал static playerSelected

Комментарии:

1. Извините. Я добавил номер строки. player не является нулевым, поскольку оно было инициализировано.