我打开它后,我的Android应用程序崩溃并出现空指针异常,转到“设置”并将语言从英语(美国)更改为英语(英国),然后返回到应用程序。将语言从英语更改为西班牙语也会导致崩溃。
由于ViewPager
对象变为空,应用程序崩溃。此对象在活动的onCreate()
方法中创建,可在我的代码中的其他位置访问,但从未更改或重新创建。
我没有做任何事情来本地化我的应用程序,以便它适用于英语(美国)以外的语言。
public class TabMainActivity extends FragmentActivity implements ActionBar.TabListener, OnSharedPreferenceChangeListener
{
ActionBar actionBar;
ActionBar.Tab popsVideoTab, corralStatusTab, reportsTab,currentStatusTab, storeStatusTab, supportTab;
ViewPager viewPager;
TabsPagerAdapter mAdapter;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.tabmain);
actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(true);
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager = (ViewPager) findViewById(R.id.pager);
viewPager.setAdapter(mAdapter);
// Creating ActionBar tabs.
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener()
{
@Override
public void onPageSelected(int position)
{
actionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2)
{
}
@Override
public void onPageScrollStateChanged(int arg0)
{
}
});
}
public int pagerGetCurrentItem()
{
int pagerCurrentItem = viewPager.getCurrentItem();
return pagerCurrentItem;
}
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</android.support.v4.view.ViewPager>
</FrameLayout>
堆栈跟踪如下。
USER_COMMENT=null
ANDROID_VERSION=4.4.2
APP_VERSION_NAME=4.5.2
BRAND=samsung
PHONE_MODEL=SM-T210R
CUSTOM_DATA=
STACK_TRACE=java.lang.RuntimeException: Unable to start activity ComponentInfo{com.carttronics.storeport/com.carttronics.storeport.TabMainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2400)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2458)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4041)
at android.app.ActivityThread.access$1000(ActivityThread.java:172)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1311)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5598)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.carttronics.storeport.TabMainActivity.pagerGetCurrentItem(TabMainActivity.java:507)
at com.carttronics.storeport.CurrentStatusFragmentTab.onCreate(CurrentStatusFragmentTab.java:95)
at android.support.v4.app.Fragment.performCreate(Fragment.java:1477)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:893)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086)
at android.support.v4.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:1879)
at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:215)
at com.carttronics.storeport.TabMainActivity.onCreate(TabMainActivity.java:66)
at android.app.Activity.performCreate(Activity.java:5459)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
... 12 more
答案 0 :(得分:1)
更改语言后,将调用Activities OnDestroy方法,然后调用onCreate方法。 onCreate活动为我的应用创建了一个新的ViewPager。我的应用程序有几个片段,其中一个片段调用了onResume()并在再次重新创建之前访问了ViewPager对象。
我对ViewPager的所有引用都进行了空检查,并且应用程序不再崩溃。
答案 1 :(得分:0)
也许这是垃圾收集,但你应该检查viewPager!= null。 如果要存储索引,可以将其保存到捆绑包中 http://developer.android.com/reference/android/app/Fragment.html in:onSavedInstance