#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
не является нулевым, поскольку оно было инициализировано.